Regex 塞德:为什么[^\]]似乎不起作用?
在第一个Regex 塞德:为什么[^\]]似乎不起作用?,regex,linux,sed,Regex,Linux,Sed,在第一个]出现之前,我正在尝试匹配/输出所有文本: sed -i -r 's/^([^\]]*).*/\1/' "$FILE.tmp" 令人惊讶的是,这不起作用 但是,搜索其他括号确实有效: sed -i -r 's/^([^\[]*).*/\1/' "$FILE.tmp" 这是sed错误还是我做错了 我知道我可以使用*?解决这个问题,这已经足够好了,但这个问题让我困惑了足够长的时间,我想知道我是否遗漏了什么 (根据--version,我使用的是GNU sed 4.2.2。)应该是: sed
]
出现之前,我正在尝试匹配/输出所有文本:
sed -i -r 's/^([^\]]*).*/\1/' "$FILE.tmp"
令人惊讶的是,这不起作用
但是,搜索其他括号确实有效:
sed -i -r 's/^([^\[]*).*/\1/' "$FILE.tmp"
这是sed错误还是我做错了
我知道我可以使用*?
解决这个问题,这已经足够好了,但这个问题让我困惑了足够长的时间,我想知道我是否遗漏了什么
(根据--version,我使用的是GNU sed 4.2.2。)应该是:
sed -r 's/^([^]]+).*/\1/'
请注意,如果
]
出现在字符组中,则无需引用。无需引用右括号]
。事实上,您的正则表达式被解析为[^\]
,后跟一个零散的]
您希望使用以下正则表达式(注意\
中没有引号):
第二个正则表达式偶然工作,因为[
在[]
表达式中没有特殊意义,但您会发现它也匹配以\
开头的行
事实上,在
[]
组中使用]
时,必须是第一个字符,如果第一个字符是^
,则必须是第二个字符,并且必须是字符组中的第一个字符,否则将关闭组。等等,你说得对。。。为什么我不需要逃逸呢?@nulldozer:你可以用PCRE正则表达式逃逸。POSIX禁止这样做。要匹配]
和-
,您需要使用“智能”放置。请看另一个答案。
sed -i -r 's/^([^]].*).*/\1/' "$FILE.tmp"