正则表达式 – 删除2个匹配模式之间的n行,保持第一个匹配并删除第二个匹配

前端之家收集整理的这篇文章主要介绍了正则表达式 – 删除2个匹配模式之间的n行,保持第一个匹配并删除第二个匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定文本文件中的数据:

string1 EP00 37.45 83.83 
save
save
save
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
string2

gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish
gibberish

我想使用sed或awk匹配string1和string 2,然后删除string1和前3行之后的所有内容.我想删除string2,但不删除string1.并删除文件与下一文本之间的一行.所以预期的产量是:

string1 EP00 37.45 83.83 
save
save
save

如果这有助于(16),则两个模式之间总有相同数量的行.我想用sed或awk做这个,但只能找出一个脚本来删除两者之间的整个数据块,保留两个字符串:

sed '/string1/,/string2/{//!d}' file >> tr.txt

有谁知道如何指定保留string1及其后面的三行,并删除两个模式之间的其余行,包括string2?我想用sed或awk这样做,哪个更容易.

谢谢!

解决方法

你可以使用这个awk:

awk '/^string1/{i=0} /^string1/,/^string2/{i++; if (i<5) print; next}1' file
string1 EP00 37.45 83.83 
save
save
save

猜你在找的正则表达式相关文章