我有一个文件b,记录的分隔符是3个字符:“'|'”,内容如下:
a'|'b'|'c
我想把“'|'”换成“*”,目标效果如下:
a*b*c
使用下面的代码:
awk '{gsub(/\047\174\047/,"*")}1' b
执行后没有效果。经过尝试,发现下面这个写法有效:
awk '{gsub(/\047\|\047/,"*")}1' b
虽然经过尝试问题解决了,但是不明白原因。请大神帮忙分析下?
我有一个文件b,记录的分隔符是3个字符:“'|'”,内容如下:
a'|'b'|'c
我想把“'|'”换成“*”,目标效果如下:
a*b*c
使用下面的代码:
awk '{gsub(/\047\174\047/,"*")}1' b
执行后没有效果。经过尝试,发现下面这个写法有效:
awk '{gsub(/\047\|\047/,"*")}1' b
虽然经过尝试问题解决了,但是不明白原因。请大神帮忙分析下?
你应该知道,在 awk 中被
//
包裹的是正则表达式,那么当你 gsub 的第一个参数是/\047\174\047/
时,其实是/'|'/
,这个正则的意思就很明确了,就是一个 ' 或者 一个 '
,和/'/
是等价的,所以结果就只将文本中的 单引号替换了。下面那个可以的原因就很明显了,给的正则实际是
/'\|'/
,也就是匹配一个 ' 跟着一个 | 再跟着一个 '