簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM