繁体   English   中英

sed中不同模式的不同替换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM