sed - 对模式搜索找到的行执行多次替换?

sed - 对模式搜索找到的行执行多次替换?

我有一个文件,其中包含类似这样的内容:

name=MOD0

还有很多我不感兴趣的额外行。我需要将此行转换为:

[MOD0]

并从文件中删除所有其他行。 MOD0 部分是不可预测的,因此我需要通过 ^name= 模式来匹配该行。我可以执行一次替换(删除“name=”),但如何告诉 sed 执行另一项操作(用括号括起该行),仍然在同一匹配行上?以下命令用方括号将每一行括起来:

sed -n -e '/^name=/ s/^name=//p; s/^.*$/\[&\]/p'

答案1

使用大括号:

sed -n '
   /^name=/ {
     s///p
     s/.*/[&]/p
   }'

请注意,空白搜索模式(如 中s///p)重复使用最后一个模式。

或者:

 sed '/^name=/!d;s///p;s/.*/[&]/'

(即删除不以开头的行name=,然后处理其他行)。

如果您只想将 替换name=xxx[xxx]而不输出xxx,那么您可以这样做:

sed -n 's/^name=\(.*\)/[\1]/p'

(或删除上述其他命令中p第一个命令的标志)。s

相关内容