regex - 删除 2 个匹配模式之间的 n 行,保留第一个匹配项并删除第二个匹配项

标签 regex bash sed awk

给定文本文件中的数据:

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

我想使用sedawk 来匹配string1 和string 2,然后删除string1 和前3 行之后的所有内容.我希望它也删除 string2,但不删除 string1。并删除该文本和下一个文本之间的额外一行。所以预期的输出将是:

string1 EP00 37.45 83.83 
save
save
save

如果有帮助的话,两个模式之间的行数总是相同的 (16)。我想用 sedawk 来做到这一点,但只能想出一个脚本来删除两者之间的整个数据 block ,同时保留两个字符串:

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

有谁知道如何指定保留 string1 及其后的三行并删除两个模式之间的其余行,包括 string2?我想用 sedawk 来做这件事,以更容易的为准。

谢谢!

最佳答案

你可以使用这个 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/

相关文章:

Javascript 正则表达式在特定单词或数字后分割

linux - 从键值文件中提取版本并在单个命令中替换为 html 文件

bash - 如果前 3 个八位字节匹配,如何使用 sed 替换文件中的所有 ip

linux - sed/awk : Aligning words in a file

regex - linux - 如何将 sed 与正则表达式一起使用

MySQL REGEXP 匹配/或字段结束

javascript - 仅当空格不包含在子字符串中时才使用正则表达式拆分空格

regex - Bash 正则表达式组不起作用

python - 在 bash 中生成多个 python 脚本

ubuntu - 删除第 3 列的每个第 2 个单词一个文本