我有一个文件,其中包含类似这样的内容:
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