[英]Adding escape back slash before every [ and ] in line using either sed or perl one liner
好的,所以我發現以下提供 ] 的工作后跟一個空格。
perl -pe s'/([\[\]])/\\$1/g'
perl -pe s'/([][])/\\$1/g'
sed 's/[][]/\\&/g'
示例行
docs/[Heresay]_File.doc
[Heresay]%20My%20File.doc
第一行沒有改變,我相信這是因為它后面沒有空格。
第二個更改為
\[Heresay\]%20My%20File.doc
這在 100 行中重復,所有成功的在 ] 之后都有一個 %20,所有失敗的都有另一個符號。 一些成功的方法是在 / 之后,因此 [ 之前的 / 不會破壞它。
一些附加信息,當我在單個樣本上嘗試它時,它直接作為命令提示符上的命令工作,但在 bash 腳本處理多行時中斷。
另外在腳本中,如果我將它鏈接兩次,例如
sed 's/[][]/\\&/g' | sed 's/[][]/\\&/g'
然后它會起作用,但當然然后應用它兩次。
與您聲稱的相反,您的所有解決方案都可以正常工作。
您發布的第一個解決方案效果很好。
$ perl -pe s'/([\[\]])/\\$1/g' file
docs/\[Heresay\]_File.doc
\[Heresay\]%20My%20File.doc
更短:
$ perl -pe's/[\[\]]/\\$&/g' file
docs/\[Heresay\]_File.doc
\[Heresay\]%20My%20File.doc
您發布的第二個解決方案效果很好。
$ perl -pe s'/([][])/\\$1/g' file
docs/\[Heresay\]_File.doc
\[Heresay\]%20My%20File.doc
更短:
$ perl -pe's/[][]/\\$&/g' file
docs/\[Heresay\]_File.doc
\[Heresay\]%20My%20File.doc
然而,了解它的工作原理依賴於一些非常神秘的知識。 我不推薦這個解決方案。
您發布的第三個解決方案效果很好。
$ sed 's/[][]/\\&/g' file
docs/\[Heresay\]_File.doc
\[Heresay\]%20My%20File.doc
這依賴於相同的神秘知識。 也就是說,我不知道sed
,經過幾次快速測試后,我還沒有找到避免這種情況的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.