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

myx*_*xal 3 sed

我有一个包含这样的文件:

name=MOD0
Run Code Online (Sandbox Code Playgroud)

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

[MOD0]
Run Code Online (Sandbox Code Playgroud)

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

sed -n -e '/^name=/ s/^name=//p; s/^.*$/\[&\]/p'
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

使用大括号:

sed -n '
   /^name=/ {
     s///p
     s/.*/[&]/p
   }'
Run Code Online (Sandbox Code Playgroud)

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

或者:

 sed '/^name=/!d;s///p;s/.*/[&]/'
Run Code Online (Sandbox Code Playgroud)

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

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

sed -n 's/^name=\(.*\)/[\1]/p'
Run Code Online (Sandbox Code Playgroud)

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