是否可以为 awk 的 gsub 函数使用替代定界符?

Is it possible to use alternate delimiters for awk's gsub function?

考虑 awk 中的以下替换。

echo 'hello/bar/goo'  | awk '{gsub(/\//,"foo"); print}'

输出如下。

hellofoobarfoogoo

请注意,我们必须将 gsub 的第一个参数中的 / 转义,因为 / 是 awk 的 gsub 函数中正则表达式的默认分隔符。

考虑到我们可以通过如下更改定界符来解决 sed 中的相同问题,我想知道 gsub.

是否也可以解决同样的问题
echo 'hello/bar/goo'  | sed 's!/!foo!g'

我已经尝试了以下两种方法,但它们会导致语法错误。

echo 'hello/bar/goo'  | awk '{gsub(!/!,"foo"); print}'                                                                                                         
awk: cmd. line:1: {gsub(!/!,"foo"); print}
awk: cmd. line:1:         ^ unterminated regexp
awk: cmd. line:2: {gsub(!/!,"foo"); print}
awk: cmd. line:2:                         ^ unexpected newline or end of string

echo 'hello/bar/goo'  | awk '{gsub(|/|,"foo"); print}'
awk: cmd. line:1: {gsub(|/|,"foo"); print}
awk: cmd. line:1:       ^ syntax error
awk: cmd. line:1: {gsub(|/|,"foo"); print}
awk: cmd. line:1:         ^ unterminated regexp

我可以在 awk 中设置一些选项以允许 gsub 的备用分隔符吗?

如果是,允许的备用分隔符集是什么?

您可以使用双引号作为分隔符。

echo 'hello/bar/goo'  | awk '{gsub("/","foo"); print}'

但是在处理反斜杠时要小心,因为您需要使用四个反斜杠来匹配一个反斜杠。

$ echo 'hello/bar\goo' | awk '{gsub("\\","foo"); print}'
hello/barfoogoo

awk 中正则表达式的唯一分隔符是 /,但您可以如 Avinash 所示,搜索字符串 "something"。没有其他选择。