簡體   English   中英

在Perl oneliner中成功匹配的URL編碼捕獲值

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

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