这个命令几乎给了我我想要的东西: -
echo "\\123.123.123.123\path1\1 - path2\path3 path4\path5" | sed 's_\\_/_g' | sed 's_ _\\ _g'
/123.123.123.123/path1/1\ -\ path2/path3\ path4/path5
但是正如人们可以看到的那样,它在开始时丢失了'//'! 即期望的外出: -
//123.123.123.123/path1/1\ -\ path2/path3\ path4/path5
我错过了什么?
编辑:在没有测试echo
的基础知识之后(非常感谢所有指出这一点的人)。我应该更清楚这个问题的最终结局。
我想在脚本中使用它,并在顶部定义windows路径
我如何echo
sed的tmp文件路径?
这显然不会起作用: -
WIN_PATH="\\123.123.123.123\path1\1 - path2\path3 path4\path5"
UNIX_PATH=`echo $WIN_PATH | sed 's_\\_/_g' | sed 's_ _\\ _g'`
答案 0 :(得分:4)
在echo
中使用单引号而不是双引号 - 因为shell会将您的两个反斜杠解释为\
的转义序列:
$ echo '\\123.123.123.123\path1\1 - path2\path3 path4\path5' | sed 's_\\_/_g' | sed 's_ _\\ _g'
//123.123.123.123/path1/1\ -\ path2/path3\ path4/path5
使用单引号可以抑制shell扩展(例如变量)并禁用大多数转义序列。
答案 1 :(得分:2)
您的问题是,\\
已经成为\
的逃脱密码,因此您已经失去\
上的echo
之一。
你可以尝试:
echo "\\123.123.123.123\path1\1 - path2\path3 path4\path5"
看到它。
你必须逃避那些\
以使它工作,即:。
echo "\\\\123.123.123.123\path1\1 - path2\path3 path4\path5" | sed 's_\\_/_g' | sed 's_ _\\ _g'
//123.123.123.123/path1/1\ -\ path2/path3\ path4/path5
答案 2 :(得分:1)
Bash使用\(反斜杠)作为转义。它不会被sed碾磨,而是在将字符串传递给echo
之前通过bash。尝试:
echo "\\123"
你会得到:
\123
要解决您的问题,请将文本放入文件中,然后从那里读取以避免shell转义:
$ cat >file
\\123.123.123.123\path1\1 - path2\path3 path4\path5
$ cat file | sed 's_\\_/_g' | sed 's_ _\\ _g'
//123.123.123.123/path1/1\ -\ path2/path3\ path4/path5
答案 3 :(得分:1)
如果您想这样做,请使用单引号,以便不会解释斜杠。
echo '\\123.123.123.123\path1\1 - path2\path3 path4\path5'