Sed删除除最后一行之外的文本

时间:2013-09-12 10:20:43

标签: sed awk

我想删除部分文字:

0
1
test1
a
b
random letter
test2
e
f
g

我想得到:

0
1
test2
e
f
g

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

但它也将删除test2 如果我不确切知道test2之前的文字

,如何删除文字并保存test2

我需要使用awksed

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
相关问题