2009-11-12 104 views
22

我需要找出一个正则表达式来删除所有不以“+”或“ - ”开头的行。如何删除所有不以某些字符开头的行?

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

+1

为什么你就不能再生的差异,并告诉它减少的背景下线路#? –

+1

对于我刚才建议的命令是'diff -c 0 -u 0' –

回答

46

在VIM中:

:g!/^[+-]/d

这里是英语翻译:

g lobally做一些不!匹配的正则表达式的所有行:后接+-线^的开始,那东西做的是d elete那些线。

+0

太好了,谢谢!这是一个很好的解决方案。 – mager

+4

如果您想保存一个按键:':v'是':g!'的同义词:) –

+0

这可以节省两个按键! Shift,1.整洁。 – Marcin

0

diff -u <some args here> | grep '^[+-]'

或者你可以不会产生额外的线路都:

diff --unified=0 <some args>

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

无用的使用'cat':'sed'接受文件名作为参数 –

+0

同意这个特殊情况。我通常在使用长链sed命令来增量过滤数据时使用cat。如果我的数据文件太大,我会用头-100代替cat,其余部分保持不变。 –

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

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

+1

你肯定需要另一个插入符号,可能不需要“e”或引号。这适用于我:'grep^[^ + - ]' –

0

如果您需要做的事情在正则表达式方面更为复杂,你应该使用这个网站: http://txt2re.com/

它也提供了多种不同语言的代码示例。

+0

谢谢!这太棒了!! – mager

相关问题