我可以使用sed 's/pattern/replacement/g file.txt
将每次出现的“模式”替换为“file.txt
中的替换。
根据How to find and replace, skipping lines containing a particular character?,我可以使用sed '/{/b;/pattern/{s//replacement/;:a;n;ba}' file.txt
将第一次出现的“pattern”替换为“replacement”,但不能在行上找到“{”时。
我可以在哪里向sed '/{/b;/pattern/{s//replacement/;:a;n;ba}' file.txt
添加“g”,以便用“替换”替换所有出现的“pattern”,而不是在行上找到“{”,而不仅仅是第一次出现?
答案 0 :(得分:1)
你可以尝试下面的awk命令。
awk '!/{/{gsub(/pattern/, "replacement")}1' file
<强>解释强>
!/{/
请勿在包含{
符号的行上执行以下功能( gsub )。gsub(/pattern/, "replacement")
将pattern
字符串全局替换为replacement
。1
处理完所有功能后打印所有行。 一个丑陋的sed命令。
sed '/^[^\{]*$/s/pattern/replacement/g' file
示例:强>
$ cat file
gchg { pattern pattern
hghg pattern
pattern pattern
$ awk '!/{/{gsub(/pattern/, "replacement")}1' file
gchg { pattern pattern
hghg replacement
replacement replacement
$ sed '/^[^\{]*$/s/pattern/replacement/g' file
gchg { pattern pattern
hghg replacement
replacement replacement
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed '/{/b;/pattern/s//replacement/g' file
将pattern
替换为replacement
,但包含{
的行除外。