37

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

我想打印一个大差异文件的纸质副本,但它在实际差异之前和之后显示了大约 5 行。

4

7 回答 7

70

在 VIM 中:

:g!/^[+-]/d

这是英文翻译:

g!lobally 对所有与正则表达式不匹配的行做一些事情:行首^后跟+or -,而要做的是d删除这些行。

于 2009-11-12T20:53:04.647 回答
2

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

于 2009-11-12T20:50:00.753 回答
0

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

或者您根本无法生成额外的行:

diff --unified=0 <some args>

于 2009-11-12T20:50:39.563 回答
0
cat your_diff_file | sed '/^[+-]/!D'
于 2009-11-12T20:51:40.090 回答
0
egrep "^[+-]" difffile >outputfile

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

于 2009-11-12T20:53:19.870 回答
0

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

它还提供了许多不同语言的代码示例。

于 2009-11-12T20:53:56.300 回答
0
%!grep -Ev '^[+-]'

它是否内联在当前文件上,并且可以比:v大文件快得多。

在 Vim 7.4、Ubuntu 14.04、1M 行日志文件上测试。

不包含单词的行:https ://superuser.com/questions/265085/vim-delete-all-lines-that-do-not-contain-a-certain-word/1187212#1187212

于 2017-03-10T09:06:25.797 回答