sed:如何匹配以单词开头但不以另一个单词结尾的行
假设我想在以“开始”开头的每一行中添加“结束”一词。但是,如果单词“end”已经在该行的末尾;无需再次添加。那么,我如何从以下方面获得:sed:如何匹配以单词开头但不以另一个单词结尾的行,sed,Sed,假设我想在以“开始”开头的每一行中添加“结束”一词。但是,如果单词“end”已经在该行的末尾;无需再次添加。那么,我如何从以下方面获得: start line 1 start line 2 end another line 3 start line 4 到 此命令匹配以“开始”开头的行,但不排除以“结束”结尾的行。我怎样才能得到一个在一行中同时执行这两个操作的正则表达式 sed 's/\(^start.*\)/\1 end/g' 使用以下方法: sed -i '/ end$/! s/^sta
start line 1
start line 2 end
another line 3
start line 4
到
此命令匹配以“开始”开头的行,但不排除以“结束”结尾的行。我怎样才能得到一个在一行中同时执行这两个操作的正则表达式
sed 's/\(^start.*\)/\1 end/g'
使用以下方法:
sed -i '/ end$/! s/^start .*$/& end/' testfile
-i
选项,允许就地修改文件
/end$/代码>-仅允许对那些不以'end'
word结尾的行执行下一个操作(替换)
s/^start.*$/&end/
-仅对以start
word开头的行执行替换
如果您承认有可能为您的案例使用其他好的替代方案,awk
可能是其中之一:
awk '{print ($1 == "start" && $(NF) != "end") ? $0" end" : $0}' testfile
$1
-指向第一个字段
$(NF)
-指向最后一个字段,或者可能没有捕获组:sed'/end$/!s/^start.*/&end/'测试文件
awk '{print ($1 == "start" && $(NF) != "end") ? $0" end" : $0}' testfile