如何删除所有不以某些字符开头的行?
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
这里是英文翻译:
g
lobally 对所有不匹配正则表达式!
的行做一些事情:行开头^
后跟+
或-
,而要做的事情是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
【讨论】:
以上是关于如何删除所有不以某些字符开头的行?的主要内容,如果未能解决你的问题,请参考以下文章