我希望能够使用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)
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)
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 '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
',它将用正斜杠替换所有反斜杠.
如果您的文本位于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
.
归档时间: |
|
查看次数: |
87522 次 |
最近记录: |