在awk脚本中,我试图使用 ' (' 作为字段分隔符。但是,除非我用双反斜杠转义括号,如下所示:
BEGIN {FS=" \\("}
Run Code Online (Sandbox Code Playgroud)
这是行不通的。
如果我使用FS=" \("我得到
awk: prog:2: warning: escape sequence `\(' treated as plain `('
awk: prog:2: fatal: :, [., or [=: / (/
Run Code Online (Sandbox Code Playgroud)
输出,如果我根本不转义括号,我只会得到
awk: prog:2: fatal: :, [., or [=: / (/ 信息。
你能解释一下这种行为吗?
要在 中使用?((空格+括号)作为字段分隔符awk,请使用"?\\\(":
$ echo "a (b (c" | awk -F " \\\(" '{ print $1; print $2; print $3 }'
a
b
c
Run Code Online (Sandbox Code Playgroud)
或者,使用单引号和两个反斜杠:
$ echo "a (b (c" | awk -F ' \\(' '{ print $1; print $2; print $3 }'
a
b
c
Run Code Online (Sandbox Code Playgroud)
这样做的原因是?((带前导空格的单括号)是格式错误的正则表达式。左括号打开一个永远不会关闭的分组。这就是为什么它需要转义。
之所以说((一个括号没有前导空格)的工作原理是,当FS某一个字符,它不是一个正则表达式处理。
| 归档时间: |
|
| 查看次数: |
4985 次 |
| 最近记录: |