Shell
用於斜線替換的不同類型引號的管道路徑
我想
sed
用來將帶有反斜杠的路徑轉換為帶有正斜杠的相同路徑:例如,我想通過管道
\\path\to\file\
獲取/path/to/file
以下命令都不起作用,我不知道為什麼:
第一次嘗試:
> echo '\\path\to\file\' | sed 's/\\/\//g' /path o ile/
第二次嘗試:
echo \\path\to\file\ | sed 's/\\/\//g' /pathtofile
第三次嘗試:
echo "\\path\to\file\" | sed 's/\\/\//g' dbquote>
如果我嘗試管道到
| tr '\' '/'
我正在尋找正確的答案,並在可能的情況下解釋為什麼上述嘗試都沒有奏效。不知道這是否重要,但這一切都在
zsh 4.2.6 (x86_64-redhat-linux-gnu)
謝謝!
file='\\path\to\file\' printf '%s\n' "$file" | tr -s '\\' /
zsh:
setopt extendedglob print -r -- ${file//\\##/\/}
不要使用
echo
. 問題echo
是版本太多,每個版本處理的反斜杠略有不同。您的顯然是在解釋原始字元串中的反斜杠。如果你剛剛# first attempt echo '\\path\to\file\'
我懷疑你會看到
\path o ile\
同樣,在您的所有其他嘗試中,問題在於您對shell 引用和反斜杠的使用
echo
以及它們之間的互動,而不是管道的第二部分(或)。echo``sed``tr
解決方案是
printf
改用 - 它的行為更加一致和可移植,因為它是由 POSIX 指定的。printf '\\\\path\\to\\file\\\n'
得到你
\\path\to\file\