找到位置,然后使用sed进行更改


11

该脚本使用sed将所有“”更改为“新内容”。使用sed或其他方法,如何仅在yyy之后更改“”?

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt

Answers:


8

我可能不明白你的问题。如果只想替换“ yyy”之后的值,请使用前面的答案。如果要在“ yyy”后替换ANY值,请尝试以下一种方法:

sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt

还没测试过:D ...


3

从O'Reilly-Sed和Awk第2次增补第152页收集的答案

在文件中编写脚本

/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}

像往常一样将其应用于您的数据

sed -f脚本sample.txt

该脚本说寻找yyy:。找到后,将另一行读入模式缓冲区(听起来像《星际迷航》中的转运器)。现在在连接的行上执行as /命令。因此,我们正在寻找yyy:换行符“”。如果找到,请用yyy替换:\注意反斜杠实际换行符,然后是“新内容”

祝好运


1
参见手册页:unixhelp.ed.ac.uk/CGI/man-cgi?sed 搜索地址段落

1

我发现一旦事情超出了一定程度的复杂性,我就会切换到perls2p将处理您当前sed解决方案的翻译。或者,您也可以从头开始编写。搜索/替换表达式将保持不变。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.