微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 sed 或 perl one liner 在行中的每个 [ 和 ] 之前添加转义反斜杠

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。