【发布时间】:2015-02-04 09:33:51
【问题描述】:
在我的项目中,有一个我无法修改的现有函数具有这一行:
gawk -v n=$OCCURENCE "/$OLD/$EXTRA{gsub(\"$OLD\",\"$NEW\")}1" $FILE_TO_AWK
就我而言,对于 $occurence 和 $extra,它给出:
gawk -v n=- "/$OLD/{gsub(\"$OLD\",\"$NEW\")}1" $FILE_TO_AWK
现在这是我正在努力解决的部分, 我尝试用另一种模式替换此模式: ReturnCode=\"200\" ($old) 。 我一直在尝试很多事情,但由于反斜杠和双引号,我一直失败。
如果我有:
[12/12/2014 12/34] 123 /url/test.gsp ReturnCode=\"500\" 12234
我想要这个:
[12/12/2014 12/34] 123 /url/test.gsp 500 12234
我尝试过这样的事情:
gawk -v n=- "/ReturnCode=\\\"500\\\"/{gsub(\"ReturnCode=\\\"500\\\"\",\"500\")}1" fichier.txt
它没有工作
使用八进制代码 042 适用于双引号,但不适用于反斜杠...我没有想法,所以如果您能帮助我,我将不胜感激 谢谢!
【问题讨论】:
-
不确定我是否理解正确,但只是提醒一下:双引号
"和反斜杠是一个特殊的正则表达式字符,所以你需要通过在前面加上反斜杠来转义它们。因此,在您的情况下,模式将是 `\\\\"200\\"\\` -
为了澄清,您是在问 $NEW 使用哪个值?
-
不,$new 不是问题,这是 ReturnCode=\"200\" 作为 $old 即。我知道 \ 和 " 是特殊字符,我确实试图逃脱但没有成功
-
为了更清楚地说明这一点,您能否提供一个示例输入和所需的输出?另外,这里处理变量的方式有点奇怪,使用
-v将bash 变量“转换”为awk 变量而不用担心转义可能会更好:awk -v old="$OLD" '$0 ~ old'等 -
我无法更改 awk 已完成的 hos。我将提供一个我想要的示例