Regex 还有其他正则表达式吗;风味;在GNU sed中?

Regex 还有其他正则表达式吗;风味;在GNU sed中?,regex,bash,sed,Regex,Bash,Sed,我喜欢,但我讨厌它的正则表达式中需要多少反斜杠。例如,下面是一个sed命令,它将从每行输入中取出前8个字: sed -n 's/^\(\S\+\s\+\)\{8\}\(.*\)/\2/p' 丑陋。 几乎每个字符前面都有一个反斜杠。如果sed假设特殊字符在默认情况下是特殊的,那就更好了 下面是我希望表达式的外观: s/^(\S+\s){8}(.*)/\2/p 有没有办法做到这一点?当然,但您需要启用-r参数 sed -rn 's/^(\S+\s){8}(.*)/\2/p' 从sed--hel

我喜欢,但我讨厌它的正则表达式中需要多少反斜杠。例如,下面是一个
sed
命令,它将从每行输入中取出前8个字:

sed -n 's/^\(\S\+\s\+\)\{8\}\(.*\)/\2/p'
丑陋。

几乎每个字符前面都有一个反斜杠。如果
sed
假设特殊字符在默认情况下是特殊的,那就更好了

下面是我希望表达式的外观:

s/^(\S+\s){8}(.*)/\2/p

有没有办法做到这一点?

当然,但您需要启用
-r
参数

sed -rn 's/^(\S+\s){8}(.*)/\2/p'
sed--help

-r、 --regexp扩展

在脚本中使用扩展正则表达式

在sed中切换到ERE 正如,
sed
默认使用基本正则表达式(BRE)语法,(需要
{
}
前面加上
\
来激活其特殊含义),
-r
选项切换到扩展正则表达式(ERE)语法,该语法处理
{
}
作为特殊,前面没有
\

POSIX标准 除了这些转义序列:

\^    \.    \[    \$    \(    \)    \|
\*    \+    \?    \{    \\
对于ERE中的其他转义序列,显式保留行为未定义

一个普通的角色是一个自我匹配的角色。普通字符是支持的字符集中的任何字符,ERE特殊字符中列出的ERE特殊字符除外。前面有反斜杠(
'\'
)的普通字符的解释未定义

由于行为是未定义的,所以实现可以自由地提供语法扩展

转义序列的GNU扩展 如评论中所述,
\s
\s
是GNU扩展。GNU实现还提供正则表达式和替换字符串语法(对于BRE和ERE):

以下扩展仅用于正则表达式:

\w \W
\b \B
\'
\`
加上这些未记录/未记录的扩展:

\s \S
\< \>
\s\s
\< \>

如果代码从未在sed的非GNU实现上运行,那么您当前的代码是可以接受的。

Ah。sed手册页上说,
-r
参数的意思是:“在脚本中使用扩展正则表达式。”我不知道这就是“扩展正则表达式”的意思。\s和\s是gnu扩展,我相信。
\s \S
\< \>