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
\< \>