![](/img/trans.png)
[英]perl oneliner print the array and other match in same print statement
[英]URL encode value of capture from successful match in Perl oneliner
我在bash腳本中使用以下Perl oneliner,以捕獲預標簽之間的多行文本,並添加包裝在不同起始和結束字符串中的標簽內容的第二次迭代:
new_start_string="NEWSTART"
new_end_string="NEWEND"
perl -i -pe "BEGIN{undef $/;} s/<pre>(.*?)<\/pre>/<pre>\$1<\/pre>${new_start_string}\$1${new_end_string}/smg" /path/to/file
它非常適合指定的任務。 我知道我正在用regex解析HTML,但這並不理想,但是,此文本文件的格式是一個已知因素,非常簡單,在本地控制下並由本地規范完成,因此在極少數情況下會進行解析過度殺傷力,我選擇不通過解析來執行此操作。
使用相同的oneliner,如何對捕獲值$ 1變量的第二次迭代進行URL編碼? 如果不可能,是否還有另一種方法可以相對簡單且可讀地獲得此結果?
對於URI轉義,您可以使用URI :: Encode 。 要在替換內使用函數,請參見/e
選項。
因為我更喜歡在Perl內核中使用模塊,所以我最終使用了將e修飾符與CGI :: Util結合使用的oneliner:
perl -MCGI -i -pe "BEGIN{undef $/;} s/<pre>(.*?)<\/pre>/'<pre>' . \$1 . '<\/pre>' . '$new_start_string' . CGI::escape(\$1) . '$new_end_string'/esmg" /my/path
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.