用空格(perl)进行正则表达式替换

时间:2014-08-03 14:45:12

标签: regex bash perl

我想替换以下perl常规experssion的所有匹配

s@typedef\s*([\w\s<>,:]*)\s(\w+)\s*;@using \2= \1;@g

在文件中。

我这样做了:

/usr/bin/perl -p -i -e "s@typedef\s*([\w\s<>,:]*)\s(\w+)\s*;@using \2= \1;@g"  ./file.txt

问题是,只要我将空格留在&#34;使用\ 2 = \ 1&#34;这个替换就不起作用了。 ?我怎样才能做到这一点?

错误: 替换替换未在-e第1行终止。

1 个答案:

答案 0 :(得分:0)

您正在调用perl命令的shell正在对您传入的正则表达式进行替换。

使用

/usr/bin/perl -p -i -e 's@typedef\s*([\w\s<>,:]*)\s(\w+)\s*;@using \2= \1;@g'  ./file.txt

代替。

这里的区别在于正则表达式是单引号。这可以防止shell替换。