![](/img/trans.png)
[英]Ruby/Regex: Dealing with strings containing forward slashes and parentheses using gsub and regex
[英]Enclosing strings with forward slashes using 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完成?
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不會看到它。)當然,使用不同的分隔符而不是斜杠會使表達式更簡單。
這應該像你期望的那樣工作:
sed "s#preg_split('\(.*\)'#preg_split('/\1/'#g"
正如@Stephen P在評論中提到的那樣。 您可以使用sed使用不同的分隔符。 如果您的分隔符用於正則表達式或替換字符串,則必須使用\\
來轉義它。 使用正則表達式和替換字符串中不存在的分隔符總是更簡單。 在這里,我用#
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.