awk 不会使用“||” 作为字段分隔符

ove*_*anu 7 awk

我正在尝试使用 awk 来剪切多字符分隔符

echo 'f1##f2' |awk -F '##' '{print $2}'
Run Code Online (Sandbox Code Playgroud)

它打印f2. 然而

echo 'f1||f2' |awk -F '||' '{print $1}'
Run Code Online (Sandbox Code Playgroud)

打印f1||f2

任何人都可以解释发生了什么?

Rom*_*est 12

|在您的情况下,垂直条字符被视为特殊字符,应进行转义:

echo "f1||f2" |awk -F'\\|\\|' '{print $1}'
f1
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以放入|字符类:

echo "f1||f2||f3" |awk -F'[|]{2}' '{print $3}'
f3
Run Code Online (Sandbox Code Playgroud)

  • @ctrl-alt-delor,仅供参考:语言上的`|` **是**“垂直条”字符(不是 OR 字符),语义上 - 在某些上下文中它是逻辑的 `OR` 运算符,在其他一些上下文中 - 正则表达式交替运算符 (2认同)