使用变量替换每次出现的模式

时间:2014-10-01 02:36:02

标签: linux awk sed

大家好我需要帮助使用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=

现在我需要替换passStr中第二次出现的名为Testtt123的字符串,并使用变量ThisIsATest=将其替换为passNew

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

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

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

接下来是有时密码的值包含斜杠。(更改了示例输入)

输出应该像

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

我能得到任何帮助吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你对“第二次出现”过于复杂。只需搜索“密码”并替换“=”后面的内容

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