使用sed,对于每个字符串,除了第一个字符串,均删除两行

时间:2019-07-19 15:17:07

标签: regex sed

我有一堆从TN3270屏幕生成的文本文件,每24行包含一个烦人的2行标题。每个标题的第一行包含“ X310A000”,但我想保留标题的第一次出现(不在第一行上)。

我可以删除所有标头

 sed '/X310A000/{N;d}' $file

但是我尝试打印直到第一次出现的所有内容,然后然后删除其余标题的尝试不起作用:

sed '1,/X310A000/p;/X310A000/,$ /X310A000/{N;d}' $file
sed: -e expression #1, char 28: unknown command: `/'

我该怎么办?

2 个答案:

答案 0 :(得分:2)

如果您想给awk一个机会,那就容易多了:

awk 'index($0, "X310A000") { if (p) {getline; next} else p=1 } 1' file

该命令在第一次遇到模式时将标志p切换为1。设置标志后,它将跳过带有模式的行以及输出的下一行。

答案 1 :(得分:1)

为第二个范围添加其他花括号:

sed '1,/X310A000/p;/X310A000/,${/X310A000/{N;d}}' $file