使用 sed 或 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,经过几次快速测试后,我还没有找到避免这种情况的方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...