给定文本文件中的数据:
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
来做到这一点,但只能想出一个脚本来删除两者之间的整个数据 block ,同时保留两个字符串:
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
关于regex - 删除 2 个匹配模式之间的 n 行,保留第一个匹配项并删除第二个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764751/