我有一个包含这样的文件:
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)
使用大括号:
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=xxx
with[xxx]
而不输出xxx
,那么您可以这样做:
sed -n 's/^name=\(.*\)/[\1]/p'
Run Code Online (Sandbox Code Playgroud)
(或删除上述其他命令中p
第一个s
命令的标志)。
归档时间: |
|
查看次数: |
1813 次 |
最近记录: |