Shell

用於斜線替換的不同類型引號的管道路徑

  • March 4, 2014

我想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\

引用自:https://unix.stackexchange.com/questions/47830