【发布时间】:2023-03-13 21:22:01
【问题描述】:
我一直在尝试使用sed 来完成以下任务。假设我有以下文件(注意:我的实际文件比这更复杂):
hello world
foo bar
people people
target
something
done
我想检查两个模式之间是否存在target,在本例中,在foo bar 和done 行之间(包括这两行),如果target 确实存在,则删除整个模式。
我知道如何使用这个sed 命令删除两个模式之间的线:
sed '/people.*/,/done/d' file
但我只想在两个字符串匹配之间存在字符串target 时删除它。
我的逻辑是这样的:
sed -n '/people.*/,/done/p' file | check if target string exists | delete entire pattern found by sed
编辑
我忘了提到在同一行中target 之前和target 之后可以有任意数量的单词。
【问题讨论】:
-
您的意思是删除
people和done之间的所有内容,或者只删除target这一行 -
删除
people和done之间的所有内容,包括people和done