如何删除以特定字符开头的所有行?

40

我需要找出一个正则表达式,以删除所有不以“+”或“-”开头的行。

我想打印一份大型差异文件的纸质副本,但它会显示实际差异之前和之后的5行左右。


1
为什么不能重新生成差异,并告诉它减少上下文行数呢? - JSBձոգչ
1
我刚才建议的命令是 diff -c 0 -u 0 - JSBձոգչ
7个回答

74

VIM中:

:g!/^[+-]/d

全局对不匹配正则表达式:行首为+-的行执行删除操作。


6
如果您想节省一个按键:':v' 是 ':g!' 的同义词 :) - Cyber Oliveira
省了两个按键!Shift,1。不错。 - Marcin
1
虽然答案非常准确,但原始问题并不是针对vim的。作为参考,可以使用sed(sed -e 'g!/^[+-]/d')完全做到同样的效果。 - h7r

2

sed -e '/^[^+-]/d'


0

diff -u <一些参数> | grep '^[+-]'

或者你可以根本不产生额外的行:

diff --unified=0 <一些参数>


0
cat your_diff_file | sed '/^[+-]/!D'

就这个特定情况而言,我同意。当我使用一长串的sed命令逐步过滤数据时,我通常使用cat。如果我的数据文件太大,我会用head -100替换cat,其余部分保持不变。 - Joy Dutta

0
egrep "^[+-]" difffile >outputfile

不要删除所有不匹配的内容,只显示匹配的行。 :)


1
你肯定需要另一个插入符,可能不需要 "e" 或引号。这对我有用:grep ^[^+-] - Dennis Williamson

0
如果你需要在正则表达式方面做更复杂的事情,你应该使用这个网站:http://txt2re.com/ 它还为许多不同的编程语言提供了代码示例。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接