如何解决sed中的转义斜线
我遇到了以下片段,这些片段讨论了逃脱斜线的不同方法:
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's/\/usr\/local\/bin/\/common\/bin/'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's_/usr/local/bin_/common/bin_'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's:/usr/local/bin:/common/bin:'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's|/usr/local/bin|/common/bin|'
输出为:
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3
我的疑问是,为什么在最后三种方法的末尾没有斜杠。我尝试在第二个练习的末尾放上
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's/\/usr\/local\/bin/\/common\/bin/'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's_/usr/local/bin_/common/bin_/'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's:/usr/local/bin:/common/bin:'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's|/usr/local/bin|/common/bin|'
但是出现错误:
/dir1/dir2/common/bin/dir3
sed: -e expression #1,char 30: unknown option to `s'
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3
解决方法
这些代码段显示的是,您基本上可以使用任何字符作为命令的定界符。 s
是命令,之后的字符是定界符。
它用于将s
的“选项”彼此分开。
s
具有三个选项,例如要被替换的内容(正则表达式),被替换的内容(字符串)和诸如g
之类的标志。
您在最后一个地方添加了/
,这被解释为一个标志,但是/
不是有效的标志。这就是导致错误的原因。
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's_/usr/local/bin_/common/bin_/'
^^^ ^^ ^^
123 24 25
1: the command
2: the delimieter
3: the first option
4: the second option
5: the flag sed does not understand
使用非斜杠作为分隔符时,斜杠对sed
没有任何特殊含义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。