【发布时间】:2011-10-14 17:47:38
【问题描述】:
我希望能够使用 sed 接受输入,例如:
C:\Windows\Folder\File.txt
到
C:/Windows/Folder/File.txt
【问题讨论】:
我希望能够使用 sed 接受输入,例如:
C:\Windows\Folder\File.txt
到
C:/Windows/Folder/File.txt
【问题讨论】:
你可以试试
sed 's:\\:\/:g'`
第一个\ 是插入一个输入,第二个\ 将是您要替换的那个。
所以它是“:”第一个斜杠“\”第二个斜杠“\”“:”“\”插入输入“/”作为将呈现的新斜杠“:”g'
\\ \/
就是这样。它会起作用的。
【讨论】:
$ 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' 将用正斜杠替换所有反斜杠。
【讨论】:
我必须使用 [\\] 或 [/] 才能完成这项工作,仅供参考。
awk '!/[\\]/' file > temp && mv temp file
和
awk '!/[/]/' file > temp && mv temp file
我使用 awk 从列表中删除反斜杠和正斜杠。
【讨论】:
如果您的文本在 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 等命令进行过滤更简洁明了。
【讨论】:
对我来说,这用正斜杠替换了一个反斜杠。
sed -e "s/\\\\/\//" file.txt
【讨论】:
这可能对你有用:
sed 'y/\\/\//'
【讨论】:
如果只是将一个字符翻译成另一个字符,tr 是最好的工具:
tr '\\' '/'
【讨论】:
tr 不是最好的工具。字符串替换是。虽然tr 比sed 更简单,但它仍然比使用内置shell 要多得多。
只需使用:
sed 's.\\./.g'
没有理由在sed 中使用/ 作为分隔符。但如果你真的想:
sed 's/\\/\//g'
【讨论】:
$ echo "C:\Windows\Folder\File.txt" | sed -e 'sf\\f/fg' C:/Windows/Folder/File.txt sed 是否只取 's' 之后的第一个字符,并且必须转义该字符的进一步出现?
sed 可以对来自文件或管道的输入流执行文本转换。示例:
echo 'C:\foo\bar.xml' | sed 's/\\/\//g'
得到
C:/foo/bar.xml
【讨论】:
.然后写不带双擒纵s.\\./.g
C: \n oar.xml。 tr 也没有..