如何删除所有不以某些字符开头的行?

时间:2009-11-12 20:47:40

标签: regex vim sed text-processing replace

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

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

7 个答案:

答案 0 :(得分:54)

在VIM中:

:g!/^[+-]/d

这是英文翻译:

g对所有不!匹配正则表达式的行执行某些操作:行^的开头,后跟+-,而要做的事情就是d选择那些线。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

或者你根本不能产生额外的线条:

diff --unified=0 <some args>

答案 3 :(得分:0)

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

答案 4 :(得分:0)

egrep "^[+-]" difffile >outputfile

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

答案 5 :(得分:0)

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

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

答案 6 :(得分: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