【发布时间】:2016-08-11 21:57:22
【问题描述】:
我想问一下 -v 和 -A 可以以某种方式结合吗?
我有示例文件:
abc
1
2
3
ACB
def
abc
1
2
3
ABC
xyz
使用 -A 我可以看到我想要“剪切”的部分:
$ grep abc -A 4 grep_v_test.txt
abc
1
2
3
ACB
--
abc
1
2
3
ABC
它有一些选项可以指定只看的东西
def
xyz
?
我找到了这个答案 - Combining -v flag and -A flag in grep 但它对我不起作用,我试过了
$ sed -e "/abc/{2;2;d}" grep_v_test.txt
sed: -e expression #1, char 8: unknown command: `;'
还有
$ sed "/abc/2d" grep_v_test.txt
sed: -e expression #1, char 6: unknown command: `2'
或
$ sed "/abc/+2d" grep_v_test.txt
sed: -e expression #1, char 6: unknown command: `+'
Sed 版本是:
$ sed --version
GNU sed version 4.2.1
编辑1: 根据评论,我对这两种解决方案都进行了一些试验,但它并没有像我想要的那样工作
对于grep -v -A 1 abc,我希望删除行 abc 和 1,但将打印其余部分 awk 'c&&!--c; /abc/ {c=2}' grep_v_test.txt 仅打印包含 2 的行,这不是我想要的。
与 sed 非常相似
$ sed -n '/abc/{n;n;p}' grep_v_test.txt
2
2
edit2: 看来,我无法正确描述它,让我再试一次。
grep -A N abc file 所做的是在 abc 之后打印 N 行。我想删除grep -A 将显示的内容,所以在一个文件中
abc
1
2
3
ACB
def
DEF
abc
1
2
3
ABC
xyz
XYZ
我将删除部分 abc 到 ABC,然后打印其余部分:
abc
1
2
3
ACB
def
DEFabc
xyz
1
2
3
ABC
XYZ
所以将保留 4 行... awk 解决方案仅打印 def 和 xyz 并跳过 DEF 和 XYZ...
【问题讨论】:
-
只需使用
awk---->awk 'c&&!--c; /abc/ {c=5}' file -
感谢您的回答,它工作正常,但我仍然想知道使用 sed 的答案(与 awk 相比,我是那个更大的朋友)。
-
然后使用Printing next line with sed 得到
sed -n "/abc/{n;n;n;n;n;p}" file。 -
现在我对前面的例子有了更好的理解,但这并不是真正的 grep -v,它没有打印不匹配的行......
-
我提到的两个单行代码都是这样做的:匹配内容为“abc”的行,然后打印其后的第 5 行。
标签: grep