Linux:如何使用sed删除从一个模式到另一个模式的行

Linux:如何使用sed删除从一个模式到另一个模式的行,linux,sed,Linux,Sed,我知道如何在sed的帮助下删除某些模式 以下是一个例子: exampleFile One Two Three Four Five Six Seven Eight One Nine Four 如果我应用以下内容,所有“一”将被删除 sed 's/\<One\>//g' exampleFile 我曾想过写以下内容,但没有用: sed 's/\<One*Four\>//g' exampleFile sed's/\//g'示例文件 (我认为,加*意味着删除介于1和4之间

我知道如何在sed的帮助下删除某些模式

以下是一个例子:

exampleFile

One Two Three Four
Five Six Seven
Eight One Nine Four
如果我应用以下内容,所有“一”将被删除

sed 's/\<One\>//g' exampleFile
我曾想过写以下内容,但没有用:

sed 's/\<One*Four\>//g' exampleFile
sed's/\//g'示例文件
(我认为,加*意味着删除介于1和4之间的所有内容)。。。我的请求甚至可以在一行中实现吗


谢谢大家!

在正则表达式中,
表示“任意字符”,而
*
表示“前一个元素的任意数量”,因此您可以:

sed 's/\<One.*Four\>//g' exampleFile
sed's/\//g'示例文件
您可以进一步添加适当的尖括号,以确保1和4必须是单独的单词:

sed 's/\<One\>.*\<Four\>//g' exampleFile
sed的/\.\//g'示例文件

添加到@另一个人的答案中,同时删除空行

sed -e 's/\<One\>.*\<Four\>//g' -e '/^$/d' exampleFile
sed-e的/\.\//g'-e'/^$/d'示例文件
这可能适合您(GNU-sed):

sed”:a;/\*\/{s/\/\n/;s/\[^\n]*\n/;/^\s*$/d;ba}文件
这将检查字符串
One
Four
是否出现在同一行上,如果出现,则用标记(
\n
)替换第二个字符串,然后从第一个字符串中删除并包括标记。如果剩余行为空或仅包含空白,则删除该行,否则重复该过程,直到第一个条件不再适用

注意:这适用于第二个字符串可能出现多次的线路。上面的方法可以应用于多行,但是必须注意确保两个字符串都存在。

face palm谢谢,我现在觉得有点尴尬,因为这太简单了。
sed -e 's/\<One\>.*\<Four\>//g' -e '/^$/d' exampleFile
sed ':a;/\<One\>.*\<Four\>/{s/\<Four\>/\n/;s/\<One\>[^\n]*\n//;/^\s*$/d;ba}' file