sed 为什么 POSIX blacket 表达式需要在另一个 blacket 中?
sed why POSIX blacket expression needs to be in another blacket?
问题
POSIX 表达式如 [:space:] 需要在另一个 [ ] 中的原因是什么?
$ echo "a b c" | sed 's/[:space:]*/_/g'
_ _b_ _
$ echo "a b c" | sed 's/[[:space:]]*/_/g'
_a_b_c_
$ echo "a b c" | sed 's/[[:space:]][[:space:]]*/_/g'
a_b_c
更新
Character classes
The POSIX standard defines some classes or categories of characters as shown below. These classes are used within brackets.
我不明白字符 类 是什么,但假设它是一个匹配任何白色 space 的特殊字符,因此相信 's/[:space:]/_g/' 会匹配 space -在 "a b" 之间,但我认为 '[:space:]' 本身不会匹配任何字符(如果仍然错误,请更正)。
我想 [:space:] 就像 '\t\n\r\f\v' 但它本身没有任何功能。使用blacket'[[:space:]]',它就具有与'[\t\n\r\f\v]'相同的功能。
您需要了解术语:
方括号表达式 是一组包含在[
和]
中的字符,可以在正则表达式中使用。该组字符可以由以下任意组合(以及可选的初始 ^
否定字符)表示:
- 一个字符列表,例如
abcd...z
,或
- 一个字符范围,例如
a-z
,或
- 一个字符class,例如
[:lower:]
所以 [:space:]
是一个字符 class(代表所有白色 space 字符)并且可以在正则表达式的括号表达式 [...]
中使用,就像 if您特别列出了括号表达式 [...]
中的所有白色 space 字符。所以这个:
[:space:]
只是一个字符class,而这个:
[[:space:]]
是一个括号表达式,其中包括所有白色 space 字符和这个:
[[:space:][:lower:]_#;A-D]
是一个括号表达式,它包括高大的白色 space 字符加上所有小写字母加上字符 _、# 和 ;加上 A 到 D 范围内的字母(无论这些字符在您的语言环境中是什么)。
问题
POSIX 表达式如 [:space:] 需要在另一个 [ ] 中的原因是什么?
$ echo "a b c" | sed 's/[:space:]*/_/g'
_ _b_ _
$ echo "a b c" | sed 's/[[:space:]]*/_/g'
_a_b_c_
$ echo "a b c" | sed 's/[[:space:]][[:space:]]*/_/g'
a_b_c
更新
Character classes
The POSIX standard defines some classes or categories of characters as shown below. These classes are used within brackets.
我不明白字符 类 是什么,但假设它是一个匹配任何白色 space 的特殊字符,因此相信 's/[:space:]/_g/' 会匹配 space -在 "a b" 之间,但我认为 '[:space:]' 本身不会匹配任何字符(如果仍然错误,请更正)。
我想 [:space:] 就像 '\t\n\r\f\v' 但它本身没有任何功能。使用blacket'[[:space:]]',它就具有与'[\t\n\r\f\v]'相同的功能。
您需要了解术语:
方括号表达式 是一组包含在[
和]
中的字符,可以在正则表达式中使用。该组字符可以由以下任意组合(以及可选的初始 ^
否定字符)表示:
- 一个字符列表,例如
abcd...z
,或 - 一个字符范围,例如
a-z
,或 - 一个字符class,例如
[:lower:]
所以 [:space:]
是一个字符 class(代表所有白色 space 字符)并且可以在正则表达式的括号表达式 [...]
中使用,就像 if您特别列出了括号表达式 [...]
中的所有白色 space 字符。所以这个:
[:space:]
只是一个字符class,而这个:
[[:space:]]
是一个括号表达式,其中包括所有白色 space 字符和这个:
[[:space:][:lower:]_#;A-D]
是一个括号表达式,它包括高大的白色 space 字符加上所有小写字母加上字符 _、# 和 ;加上 A 到 D 范围内的字母(无论这些字符在您的语言环境中是什么)。