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

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

a'|'b'|'c

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

a*b*c

使用下面的代码:

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

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

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

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


慕神8447489
浏览 1404回答 2
2回答

慕后森

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

交互式爱情

下面那个可以的原因就很明显了,给的正则实际是 /'\|'/,也就是匹配 一个 ' 跟着一个 | 再跟着一个 '
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java