使用双斜杠在windows和unix路径之间转换

使用双斜杠在windows和unix路径之间转换,windows,linux,bash,path,sed,Windows,Linux,Bash,Path,Sed,这个命令几乎给了我想要的:- 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 "\\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'`

您的问题是,
\
中的
\
已经是
\
的转义序列,因此您已经丢失了
回音上的一个
\
。 您可以尝试:

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

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扩展(例如变量)并禁用大多数转义序列。

Bash使用\(反斜杠)作为转义。在将字符串传递到
echo
之前,sed并没有咀嚼它,而是通过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

如果要这样做,请使用单引号,这样斜杠就不会被解释

echo '\\123.123.123.123\path1\1 - path2\path3 path4\path5'

非常感谢,我已经更新了我的问题,因为我没有完全描述我的结局!如果我的眼睛不让我失望,那就是你正在使用的回击。使用single quotes.Ops,这里有一个输入错误,将其更正为我的脚本,工作正常,但并不真正喜欢tmp文件!但从长远来看并不重要。那你为什么需要tmp文件呢<代码>源路径=$(echo$WIN\u路径| sed's\\\\\\\\\\\\\\\ g'| sed's\\\\\\ g')