在sh shell脚本中。
给出文本文件中的数据:
string1
string2 gibberish
gibberish
string3 gibberish
string4
如何使用awk或sed删除string2
(包含)和string3
之间的所有行(不包括string3
)?
最终:
string1
string3
string4
答案 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
。