1

我想删除部分文本:

0
1
test1
a
b
random letter
test2
e
f
g

我想得到:

0
1
test2
e
f
g

我试过使用 sed: sed '/test1/,/test2/d'

但它也会删除 test2如果我不完全知道之前的文本,我该
如何删除文本并保存test2test2

我需要使用awksed

4

2 回答 2

5

试试这个:

sed '/test1/,/test2/{/test2/!d}'

用你的例子测试:

kent$  echo "0
1
test1
a
b
random letter
test2
e
f
g"|sed '/test1/,/test2/{/test2/!d}'
0
1
test2
e
f
g
于 2013-09-12T10:30:14.470 回答
3
awk 'BEGIN{p=1}/test1/{p=0}/test2/{p=1}p' your_file

测试如下:

> cat temp
0
1
test1
a
b
random letter
test2
e
f
g
>
> awk 'BEGIN{p=1}/test1/{p=0}/test2/{p=1}p' temp
0
1
test2
e
f
g
> 

如果你想在 awk 中搜索整个单词:搜索如下:

/\<WORD\>/

或者,您也可以使用 perl:

perl -lne 'BEGIN{$p=1}if(/\btest1\b/){$p=0}if(/\btest2\b/){$p=1}print if $p' your_file
于 2013-09-12T10:26:13.337 回答