2014-10-01 35 views
0

嗨,大家好,我需要使用Linux脚本的帮助。使用变量替换每次发生的模式

这是一个示例输入:

Login=Testtt/123 Password=Testtt/123 Login=eJwQwq12 Password=OjeEor/Kd

首先,我用grep然后AWK使用下面的代码

passStr=grep 'Passsword' test.param | awk -F= '{print $2}'

所以那里我得到了Testtt123然后把它搜索的模式使用passStr进入变量。

然后我把字符串替换成使用

passNew=ThisIsATest=

现在我需要更换的字符串称为Testtt123第二次出现是在passStr和使用变量passNew

它更换成 ThisIsATest=另一个变量

我只有这个代码,但它取代了所有出现的字符串。

sed /$passStr/{s/$passStr/$passNew/} test.param

这里的问题是,第二次出现位于不同的线路。 还有其他的密码发生,使我很难使用awk,因为passStr将有两个可能的值。我只需要第一个密码。

接下来是有次在该密码的值包含斜杠(改变样品输入)

输出应该像

Login=Testtt123 Password=ThisIsATest= Login=eJwQwq12 Password=OjeEor/Kd

任何帮助,我能得到什么?

+1

显示输入样本。 – John1024 2014-10-01 03:07:12

+0

您已经告诉了我们很多关于您如何解决您的问题的建议,但还不足以说明您的问题实际上是我们真正帮助您的。发布一些示例输入和预期输出,包括您认为难以处理的情况,例如在不希望它们匹配的行上搜索字符串,搜索其他字符串的一部分的字符串等。 – 2014-10-01 13:23:43

回答

1
sed "$!N;$s/${passStr}/${passNew}/2" test.param 

sed的是线由默认的行,你需要首先将内容加载到工作缓冲区,并在最后一行的测试加载

0

你有“第二occurrance”过于复杂。只需搜索“密码”并替换“=”后面的内容即可。

sed '/Password/ s/=.*/='"$passNew"/' file