假设我有很多文件的形式
First Line Name
Second Line Surname Adress
Third Line etc
etc
现在我使用 grep 来匹配第一行。但我这样做实际上是为了找到 第二个线。第二行不是可以匹配的模式(它只取决于第一行)。我的正则表达式模式有效,我使用的命令是
grep -rHIin pattern . -A 1 -m 1
现在
-A
选项打印行 赛后 . -m
选项 1 场比赛后停止 (因为还有其他行符合我的模式,但我只对第一场比赛感兴趣,无论如何......)这实际上有效,但输出是这样的:
./example_file:1: First Line Name
./example_file-2- Second Line Surname Adress
我已经阅读了手册,但找不到任何线索或信息。现在问题来了。
如何抑制匹配 本身 ?输出应采用以下形式:
./example_file-2- Second Line Surname Adress
最佳答案
sed
救援:
sed -n '2,${p;n;}'
此处特定的 sed 命令从其输入的第 2 行开始,每隔一行打印一次。将 grep 的输出通过管道传输到其中,您将只能从 grep 输出中获得偶数行。
sed 命令本身的解释:
2,$
- 从第 2 行到文件最后一行的行范围{p;n;}
- p
打印当前行,然后 ig n
矿石下一行(然后重复)(在所有偶数行的这种特殊情况下,另一种写法是
sed -n 'n;p;'
因为我们实际上不需要对任何前导行进行特殊处理。如果你想跳过文件的前 5 行,这个不可能,您必须使用 6,$
语法。)
关于regex - 在 grep 中抑制匹配本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165254/