假设我想添加单词" end"以"开始"开头的每一行。但是,如果单词" end"已经走到了尽头;无需再次添加。那我怎么得到:
start line 1
start line 2 end
another line 3
start line 4
到
start line 1 end
start line 2 end
another line 3
start line 4 end
此命令匹配以" start"开头的行,但不排除以" end"结尾的行。如何在一行中获得同时执行这两种操作的正则表达式?
sed 's/\(^start.*\)/\1 end/g'
答案 0 :(得分:1)
使用以下方法:
sed -i '/ end$/! s/^start .*$/& end/' testfile
-i
选项允许修改文件到位
/ end$/!
- 仅允许对那些不以' end'
字结尾的行执行 next 操作(替换)
s/^start .*$/& end/
- 仅对以start
字
如果您承认为您的案例使用其他好的替代方案的可能性,awk
可能是其中之一:
awk '{print ($1 == "start" && $(NF) != "end") ? $0" end" : $0}' testfile
$1
- 指向第一个字段
$(NF)
- 指向最后一个字段