删除两个字符串之间的所有行

时间:2010-01-26 00:28:31

标签: string sed awk

在sh shell脚本中。

给出文本文件中的数据:

string1  
string2 gibberish  
gibberish  
string3 gibberish  
string4  

如何使用awk或sed删除string2(包含)和string3之间的所有行(不包括string3)?

最终:

string1  
string3  
string4  

4 个答案:

答案 0 :(得分:3)

string1,string2,string3等都在不同的行上吗? 在这种情况下,您可以使用awk:

awk '/string2/{flag=1} /string3/{flag=0} !flag'

或sed:

sed '/string3/p; /string2/,/string3/d'

答案 1 :(得分:2)

你可以试试这个。 “string2”之前的任何内容都不会被删除。

awk 'BEGIN{f=0}
{
    match($0,"string2")
    if(RSTART){
        print substr($0,1,RSTART-1)
        f=1
        next
    }
    match($0,"string3")
    if(RSTART){
        $0=substr($0,RSTART)
        f=0
    }
}
f==0{print}
' file

输出

$ cat file
string1 blah blah
text before string2 junk
gibberish
gibberis string3 text here
string4

$ ./shell.sh
string1 blah blah
text before
string3 text here
string4

答案 2 :(得分:1)

以下内容适用于 sed

sed  '
/string2/,/string3/bdeleting
b
:deleting
s/string3.*/string3/
/string3/b
d
'

假设我们匹配 string2 之后第一次出现 string3

答案 3 :(得分:0)

以下是正则表达式替换示例:

s/string2.*?(?=string3)//sg

这将从string2删除所有内容,但不包括string3