我知道我可以使用grep -v'^#'来删除以#
开头的行现在我遇到问题,当我尝试这样做去除[ 即。 grep -v'^ ['甚至是sed'/ ^ [/ d'
为什么会发生这种情况?如何实现这一目标?
答案 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
错误消息报告找到了无效的正则表达式。这是因为[
是一个正则表达式活动字符:[...]
用于定义字符列表。因此,如果正则表达式包含未转义的[
,则它还必须包含匹配的]
。有两种方法可以避免这种情况:
逃避它。如果[
是正则字符有效字符,则\[
通常会被视为常规(非活动)字符。
将其放入角色列表中。 [[]
是一个只匹配一个字符的字符列表:[
。