Linux:删除以[开头]的行

时间:2015-09-30 01:25:53

标签: linux sed grep

我知道我可以使用grep -v'^#'来删除以#

开头的行

现在我遇到问题,当我尝试这样做去除[ 即。 grep -v'^ ['甚至是sed'/ ^ [/ d'

为什么会发生这种情况?如何实现这一目标?

1 个答案:

答案 0 :(得分:5)

考虑这个测试文件:

$ cat brackets 
keep
[remove]

使用grep:

$ grep -v '^\[' brackets
keep

或者:

$ grep -v '^[[]' brackets
keep

使用sed:

$ sed '/^\[/d' brackets 
keep

或者:

$ sed '/^[[]/d' brackets 
keep

为什么

如果计算机命令无法按预期工作,则查看错误消息非常重要。考虑:

$ grep -vE '^[' brackets
grep: Invalid regular expression

错误消息报告找到了无效的正则表达式。这是因为[是一个正则表达式活动字符:[...]用于定义字符列表。因此,如果正则表达式包含未转义的[,则它还必须包含匹配的]。有两种方法可以避免这种情况:

  1. 逃避它。如果[是正则字符有效字符,则\[通常会被视为常规(非活动)字符。

  2. 将其放入角色列表中。 [[]是一个只匹配一个字符的字符列表:[