是否可以为 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"
。没有其他选择。
考虑 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"
。没有其他选择。