我有一个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完成?
答案 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使用不同的分隔符。如果您的分隔符用于正则表达式或替换字符串,则必须使用\
将其转义。使用正则表达式和替换字符串中不存在的分隔符总是更简单。在这里,我使用了#
。