使用awk和gsub转义反斜杠

时间:2015-02-04 09:33:52

标签: regex bash shell awk gsub

在我的项目中,有一个我无法修改的现有功能:

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用于双引号但不反斜杠...我没有想法所以如果你能帮助我,我会感激不尽 谢谢!

1 个答案:

答案 0 :(得分:0)

当事情变得棘手时,我喜欢在我的AWK脚本周围使用单引号并将值作为变量-v OLD="$OLD" -vNEW="$NEW"传递,然后通过在AWK代码中打印出来更容易调试。

但实际上我认为“sed”可能是一个更好的工具,使用capture-expression来保存返回代码:

MATCH='url\/test'
OLD='ReturnCode=\\\"\([0-9]*\)\\\"'
NEW='\1'
sed -e "/$MATCH/ { s@$OLD@$NEW@g }" $FILE