如何解决使用 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 举报,一经查实,本站将立刻删除。