Linux:删除以[开头]的行

Joe*_*Joe -4 linux grep sed

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

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

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

Joh*_*024 5

考虑这个测试文件:

$ cat brackets 
keep
[remove]
Run Code Online (Sandbox Code Playgroud)

使用grep:

$ grep -v '^\[' brackets
keep
Run Code Online (Sandbox Code Playgroud)

要么:

$ grep -v '^[[]' brackets
keep
Run Code Online (Sandbox Code Playgroud)

使用sed:

$ sed '/^\[/d' brackets 
keep
Run Code Online (Sandbox Code Playgroud)

要么:

$ sed '/^[[]/d' brackets 
keep
Run Code Online (Sandbox Code Playgroud)

为什么

当计算机命令无法按预期工作时,查看错误消息非常重要.考虑:

$ grep -vE '^[' brackets
grep: Invalid regular expression
Run Code Online (Sandbox Code Playgroud)

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

  1. 逃避它.如果[是正则表达式活动字符,则\[通常将其视为常规(非活动)字符.

  2. 把它放在一个字符列表中. [[]是一个只匹配一个字符的字符列表:[.