簡體   English   中英

使用 sed 或 perl 一行中的每個 [ 和 ] 之前添加轉義反斜杠

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

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