![](/img/trans.png)
[英]sed to replace same patterns that have slightly different ending to the string
[英]Different replacements for different patterns in sed
我需要在文件的每一行中替换两个模式。 让我们说例如该文件包含以下内容:
pattern1 a1 b1 c1
pattern2 a2 b2 c2
pattern1 a1 b1 c1
基本上,出现“pattern1”的任何地方,a1需要替换为b2的a2和b1,依此类推。 但是,我也想将pattern1更改为pattern2。
到目前为止,我有一些接近的东西:
/pattern1/ s/a1 b1 c1/a2 b2 c2/
注意,我想将整个sed脚本保存在一个文件中。
更新所需的输出,这可能不是最好的例子,我会回答任何问题。
pattern2 a2 b2 c2
pattern2 a2 b2 c2
pattern2 a2 b2 c2
有各种方法可以做到这一点。
sed -e '/pattern1/{
s/a2/a1/
s/b2/b1/
s/c2/c1/
s/pattern1/pattern2/
}' "$@"
您通常可以使用分号代替换行符将其折叠为单行(但是某些版本的sed
比其他版本更为繁琐)。 在这种情况下, -e
并非绝对必要。
从'a1'是否应该用'a2'代替,反之亦然,这个问题并不完全清楚; 这段代码的作用是“a1需要替换为a2”(意思是“用a1替换a2的出现次数”),但是这个例子暗示了相反的替换。 如果需要其他含义,则使用s/a1/a2/
而不是s/a2/a1/
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.