Laser
Laser

Reputation: 6960

Sed remove text to text except last line

I want to delete part of text:

0
1
test1
a
b
random letter
test2
e
f
g

I want to get:

0
1
test2
e
f
g

I've tried use sed: sed '/test1/,/test2/d'

But it will remove test2 too
How can I delete text and save test2, if I don't exactly know what text before test2

I need to use awk or sed

Upvotes: 1

Views: 116

Answers (2)

Vijay
Vijay

Reputation: 67301

awk 'BEGIN{p=1}/test1/{p=0}/test2/{p=1}p' your_file

Tested Below:

> 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
> 

If you want to search for whole word in awk: search like below:

/\<WORD\>/

Alternatively you can go perl as well:

perl -lne 'BEGIN{$p=1}if(/\btest1\b/){$p=0}if(/\btest2\b/){$p=1}print if $p' your_file

Upvotes: 3

Kent
Kent

Reputation: 195229

give this a try:

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

test with your example:

kent$  echo "0
1
test1
a
b
random letter
test2
e
f
g"|sed '/test1/,/test2/{/test2/!d}'
0
1
test2
e
f
g

Upvotes: 5

Related Questions