Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 塞德:为什么[^\]]似乎不起作用?_Regex_Linux_Sed - Fatal编程技术网

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"