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

Posted

技术标签:

【中文标题】如何删除所有不以某些字符开头的行?【英文标题】:How can I delete all lines that do not begin with certain characters? 【发布时间】:2010-12-16 01:34:19 【问题描述】:

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

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

【问题讨论】:

为什么不能只重新生成差异并告诉它减少上下文行数? 对于我刚才的建议,命令是diff -c 0 -u 0 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

或者你根本无法产生额外的行:

diff --unified=0 <some args>

【讨论】:

【参考方案3】:
cat your_diff_file | sed '/^[+-]/!D'

【讨论】:

同意这个特殊情况。当使用一长串 sed 命令逐步过滤数据时,我通常使用 cat 。如果我的数据文件太大,我将 cat 替换为 head -100,其余部分保持不变。【参考方案4】:

在 VIM 中:

:g!/^[+-]/d

这里是英文翻译:

globally 对所有不匹配正则表达式! 的行做一些事情:行开头^ 后跟+-,而要做的事情是d删除那些行。

【讨论】:

如果你想保存一次击键:':v' 是 ':g!' 的同义词:) 这样可以节省两次击键! Shift, 1. 整洁。 虽然答案很明确,但最初的问题并不是 vim 特定的。但是,作为参考,可以使用 sed (sed -e 'g!/^[+-]/d') 执行完全相同的操作。【参考方案5】:
egrep "^[+-]" difffile >outputfile

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

【讨论】:

您肯定需要另一个插入符号,并且可能不需要“e”或引号。这对我有用:grep ^[^+-]【参考方案6】:

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

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

【讨论】:

【参考方案7】:
%!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

【讨论】:

以上是关于如何删除所有不以某些字符开头的行?的主要内容,如果未能解决你的问题,请参考以下文章

删除不以/不包含特定单词开头的行

sed 练习

文本处理工具sed

notepad如何删除某个字符开头的行,notepad如何删除空白行?

如何使用正则表达式匹配不以某些字符开头或结尾的单词?

FilterListView - 从列表中删除不以提供的前缀开头的项目