sed:如何匹配以单词开头但不以另一个单词结尾的行

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

假设我想在以“开始”开头的每一行中添加“结束”一词。但是,如果单词“end”已经在该行的末尾;无需再次添加。那么,我如何从以下方面获得:

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