使用双斜杠在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')