使用AWK用正斜杠括起字符串

时间:2014-04-24 19:19:01

标签: regex linux awk

我有一个php文件,其中广泛使用了split()函数。我使用sed和find命令将它替换为preg_split。现在的问题是preg_split要求将正则表达式模式括在分隔符中,而split则不需要它。

我已尝试使用SED将字符串用分隔符括起来,但根据我的知识,SED无法使用它。我已经知道AWK kan解决了这个问题。

我想要

 preg_split('\r\n', $some_string); 

将被修改为

 preg_split('/\r\n/', $some_string);

正斜杠用作分隔符。如何使用AWK完成?

2 个答案:

答案 0 :(得分:1)

sed完全有能力做到这一点。

sed "s:\(preg_split('\)\(([^']*\)':\1/\2/':g" file.php

您的sed方言可能需要不同的反斜杠组合;或者使用Perl(或者,呃,PHP);

perl -pi~ -e "s:(preg_split\(')([^']*)':$1/$2/':g" file.php

(注意就地编辑的-i标志;也许您的sed也支持这种情况?)

我想象你的问题是引用而不是实际的sed正则表达式。在shell中正确引用单引号可能是一个挑战。 (在最坏的情况下,将shell脚本放在一个文件中,以便shell不会看到它。)当然,使用不同的分隔符而不是斜杠会使表达式更简单。

答案 1 :(得分:1)

这应该像你期望的那样工作:

 sed "s#preg_split('\(.*\)'#preg_split('/\1/'#g"

正如@Stephen P在评论中提到的那样。您可以使用sed使用不同的分隔符。如果您的分隔符用于正则表达式或替换字符串,则必须使用\将其转义。使用正则表达式和替换字符串中不存在的分隔符总是更简单。在这里,我使用了#