使用sed用正斜杠替换所有反斜杠

Emi*_*ily 43 bash shell sed

我希望能够使用sed来获取输入,例如:

C:\Windows\Folder\File.txt
Run Code Online (Sandbox Code Playgroud)

C:/Windows/Folder/File.txt
Run Code Online (Sandbox Code Playgroud)

gle*_*man 60

只是将一个字符串翻译成另一个字符串,tr是最好的工具:

tr '\\' '/'
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下,"tr"比"sed"更简单,更快. (2认同)
  • `tr`不是最好的工具.字符串替换是.虽然`tr`比`sed'更简单,但它仍然比使用shell内置更多的工作. (2认同)

Emi*_*ggi 59

sed可以对来自文件或管道的输入流执行文本转换.例:

echo 'C:\foo\bar.xml' | sed 's/\\/\//g'
Run Code Online (Sandbox Code Playgroud)

得到

C:/foo/bar.xml
Run Code Online (Sandbox Code Playgroud)

  • 您可以给 sed 另一个分隔符,例如 `.`,然后在没有双擒纵符的情况下写入 `s.\\./.g` (2认同)

Meh*_*dad 23

只需使用:

sed 's.\\./.g'
Run Code Online (Sandbox Code Playgroud)

没有理由/用作分隔符sed.但如果你真的想:

sed 's/\\/\//g'
Run Code Online (Sandbox Code Playgroud)

  • 这很整洁,我想你不需要在第一种情况下逃避正斜杠,因为分隔符是'.' 但你做的是第二种情况.即使是以下作品!`$ echo"C:\ Windows\Folder\File.txt"| sed -e'sf \\ f/fg'C:/ Windows/Folder/File.txt` sed是否只接受's'之后的第一个字符,并且必须转义该字符的进一步出现? (3认同)

Jim*_*mmy 9

$ echo "C:\Windows\Folder\File.txt" | sed -e 's/\\/\//g'
C:/Windows/Folder/File.txt
Run Code Online (Sandbox Code Playgroud)

这种情况下的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',它将用正斜杠替换所有反斜杠.


Tob*_*ght 7

如果您的文本位于Bash变量中,则参数替换${var//\\//}可以替换子字符串:

$ p='C:\foo\bar.xml'
$ printf '%s\n' "$p"
C:\foo\bar.xml
$ printf '%s\n' "${p//\\//}"
C:/foo/bar.xml
Run Code Online (Sandbox Code Playgroud)

通过诸如tr或之类的命令进行过滤可能更精确,更清晰sed.