AWK正则表达式为gsubs模式

时间:2015-04-02 13:40:14

标签: regex awk

我正在尝试定义一个gsub awk语句来查找所有未转义的$ chars并将其转义。

以下输入 - >结果应该处理:

$ -> \$
$a -> \$a
\$ -> \$
$$$ -> \$\$\$

所以基本上我正在寻找这个陈述中的正确模式:

gsub(pattern,"\\\$", input_string);

1 个答案:

答案 0 :(得分:1)

使用$作为字段分隔符,awk会拆分输入,只有当字符串为空或以任何字符结尾但不以反斜杠字符结尾时才会在末尾添加反斜杠。

$ cat file
$
$a$$$
\$
$$$\$$
$ awk -F$ -v OFS="$" '{for(i=1;i<NF;i++){if($i == "" || $i ~/[^\\]$/) $i=$i"\\"}}1' file
\$
\$a\$\$\$
\$
\$\$\$\$\$

你也可以尝试下面的perl解决方案。

perl -pe 's/(?<!\\)\$/\\\$/g' file

替换匹配所有不带反斜杠的$,并在它们之前添加反斜杠。反斜杠本身都需要转义,$也是如此,因为它在正则表达式中具有特殊含义。