awk gsub中使用特殊符号匹配的问题

新手上路,请多包涵

我有一个文件b,记录的分隔符是3个字符:“'|'”,内容如下:

a'|'b'|'c

我想把“'|'”换成“*”,目标效果如下:

a*b*c

使用下面的代码:

awk '{gsub(/\047\174\047/,"*")}1' b

执行后没有效果。经过尝试,发现下面这个写法有效:

awk '{gsub(/\047\|\047/,"*")}1' b

虽然经过尝试问题解决了,但是不明白原因。请大神帮忙分析下?

阅读 3.7k
1 个回答

你应该知道,在 awk 中被 // 包裹的是正则表达式,那么当你 gsub 的第一个参数是 /\047\174\047/ 时,其实是 /'|'/,这个正则的意思就很明确了,就是 一个 ' 或者 一个 ',和 /'/ 是等价的,所以结果就只将文本中的 单引号替换了。

下面那个可以的原因就很明显了,给的正则实际是 /'\|'/,也就是匹配 一个 ' 跟着一个 | 再跟着一个 '

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进