我希望能够使用sed来获取输入,例如:
C:\Windows\Folder\File.txt
到
C:/Windows/Folder/File.txt
答案 0 :(得分:57)
只是在一个字符串中将一个字符翻译成另一个字符,tr
是最好的工具:
tr '\\' '/'
答案 1 :(得分:51)
sed
可以对来自文件或管道的输入流执行文本转换。例如:
echo 'C:\foo\bar.xml' | sed 's/\\/\//g'
得
C:/foo/bar.xml
答案 2 :(得分:22)
只需使用:
sed 's.\\./.g'
没有理由在/
中使用sed
作为分隔符。但如果你真的想:
sed 's/\\/\//g'
答案 3 :(得分:9)
$ echo "C:\Windows\Folder\File.txt" | sed -e 's/\\/\//g'
C:/Windows/Folder/File.txt
在这种情况下,sed命令是's/OLD_TEXT/NEW_TEXT/g'
。
领先的's'告诉它搜索OLD_TEXT并用NEW_TEXT替换它。
尾随'g'只是表示替换给定行上的所有匹配项,而不仅仅是第一行。
当然,你需要将's','g',旧的和新的彼此分开。这是您必须使用正斜杠作为分隔符的地方。
针对您的案例OLD_TEXT == '\'
和NEW_TEXT == '/'
。但你不能只是绕着输入斜线并期望按预期工作同时使用它们作为分隔符。一般来说,斜杠非常特殊,必须按此处理。必须用反斜杠“逃避”(即先前)。
对您而言,OLD_TEXT == '\\'
和NEW_TEXT == '\/'
。将这些内容置于's/OLD_TEXT/NEW_TEXT/g'
范例内
's/\\/\//g'
。读作为
's
/ \\
/ \/
/ g
'并且在逃脱后是
's
/ \
/ /
/ g
'将使用正斜杠替换所有反斜杠。
答案 4 :(得分:7)
如果您的文本位于Bash变量中,则参数替换${var//\\//}
可以替换子字符串:
$ p='C:\foo\bar.xml'
$ printf '%s\n' "$p"
C:\foo\bar.xml
$ printf '%s\n' "${p//\\//}"
C:/foo/bar.xml
通过tr
或sed
等命令进行过滤可能会更精简,更清晰。
答案 5 :(得分:2)
这可能对您有用:
sed 'y/\\/\//'
答案 6 :(得分:1)
对我来说,这会用正斜杠替换一个反斜杠。
sed -e "s/\\\\/\//" file.txt
答案 7 :(得分:1)
你可以尝试
sed 's:\\:\/:g'`
第一个\
是插入输入,第二个\
将是您要替换的输入。
所以它是's“:”First Slash“\”second slash“\”“:”“\”插入输入“/”作为将显示的新斜杠“:”g'
\\ \/
就是这样。它会起作用。
答案 8 :(得分:-1)
我必须使用[\\]
或[/]
来完成这项工作,仅供参考。
awk '!/[\\]/' file > temp && mv temp file
和
awk '!/[/]/' file > temp && mv temp file
我使用awk从列表中删除反斜杠和正斜杠。