繁体   English   中英

可以将替代分隔符用于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" 没有其他选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM