2011-04-12 39 views
3

這個命令幾乎給我我想要的: -Windows和UNIX路徑之間的轉換與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 

但正如人們可以看到,它的開頭失去了「//」!
即,預期outout: -

//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

如果我的眼睛沒有讓我失望,那就是你正在使用的反色。使用單引號。 – kurumi 2011-04-12 09:36:04

+0

OPS,這是這裏的一個錯字,將它修改爲我的腳本,它工作正常,但不真正喜歡tmp文件!但從長遠來看,這並不重要。 – 2011-04-12 09:40:22

+1

爲什麼你需要一個tmp文件呢? 'SOURCE_PATH = $(echo $ WIN_PATH | sed's _ \ _ _ _ _ _'_''sed's __ \'_g')' – kurumi 2011-04-12 09:44:52

回答

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

你的問題是,在\\已經逃逸secuence爲\所以你已經失去了\之一的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 
1

Bash使用\(反斜槓)作爲轉義。它沒有被sed咀嚼,而是在將字符串傳遞給echo之前進行猛擊。嘗試:

echo "\\123" 

您將獲得:

\123 

解決您的問題,把你的文本文件,並從那裏讀出,以避免殼逸出:

$ 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 
+0

非常感謝,我更新了我的問題,因爲我沒有完全描述我的最終遊戲! – 2011-04-12 09:33:30

1

如果你想這樣做,使用單引號,這樣斜線不會被解釋。

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