我知道如何在sed。
的帮助下删除某些模式以下是一个例子:
exampleFile
One Two Three Four
Five Six Seven
Eight One Nine Four
如果我应用以下内容,则所有内容都将被删除。
sed 's/\<One\>//g' exampleFile
但是如果我想删除从One到Four的所有内容呢?我正在寻找的输出是:
Five Six Seven
Eight
我考虑过编写以下内容,但它不起作用:
sed 's/\<One*Four\>//g' exampleFile
(我认为通过放*,它应该意味着删除其中的所有内容,包括一和四)...我的请求甚至可以在一行中吗?
谢谢!
答案 0 :(得分:2)
在正则表达式中,.
表示“任何字符”,*
表示“任意数量的前一个元素”,因此您可以这样做:
sed 's/\<One.*Four\>//g' exampleFile
您可以进一步添加适当的尖括号,以确保One和Four必须是单独的单词:
sed 's/\<One\>.*\<Four\>//g' exampleFile
答案 1 :(得分:1)
添加@that其他人的答案,删除空白行
sed -e 's/\<One\>.*\<Four\>//g' -e '/^$/d' exampleFile
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed ':a;/\<One\>.*\<Four\>/{s/\<Four\>/\n/;s/\<One\>[^\n]*\n//;/^\s*$/d;ba}' file
检查字符串One
和Four
是否出现在同一行,如果是,则用标记(\n
)替换第二个字符串,然后从第一个字符串中删除包括标记。如果剩余的行为空或仅包含空格,则删除该行,否则重复该过程直到第一个条件不再适用。
N.B。这适用于第二个字符串可能出现不止一次的行。上述方法可以应用于多行,但必须注意确保两个字符串都存在。