shell 使用sed将所有反斜杠替换为正斜杠

7eumitmz  于 2022-11-30  发布在  Shell
关注(0)|答案(9)|浏览(615)

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

C:\Windows\Folder\File.txt

C:/Windows/Folder/File.txt
hfyxw5xn

hfyxw5xn1#

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

echo 'C:\foo\bar.xml' | sed 's/\\/\//g'

输出:

C:/foo/bar.xml
gijlo24d

gijlo24d2#

如果只是将字符串中的一个字符转换为另一个字符,tr是最好的工具:

tr '\\' '/'
w1e3prcc

w1e3prcc3#

只需使用:

sed 's.\\./.g'

没有理由在sed中使用/作为分隔符。但是如果你真的想:

sed 's/\\/\//g'
7cwmlq89

7cwmlq894#

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

$ p='C:\foo\bar.xml'
$ printf '%s\n' "$p"
C:\foo\bar.xml
$ printf '%s\n' "${p//\\//}"
C:/foo/bar.xml

与通过诸如trsed之类的命令进行过滤相比,这可能更精简、更清晰。

nwlqm0z1

nwlqm0z15#

$ 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',它将用正斜杠替换所有反斜杠。

c9qzyr3d

c9qzyr3d6#

这可能对您有用:

sed 'y/\\/\//'
rpppsulh

rpppsulh7#

对我来说,这将一个反斜杠替换为一个正斜杠。

sed -e "s/\\\\/\//"  file.txt
nkoocmlb

nkoocmlb8#

你可以试试

sed 's:\\:\/:g'`

第一个\用于插入输入,第二个\将是您要替换的输入。
因此,“:“第一个斜杠“\”第二个斜杠“\”“:““\”将输入“/”作为新斜杠插入,该新斜杠将显示为“:“g”

\\ \/

就这样。它会成功的。

7rfyedvj

7rfyedvj9#

我必须使用[\\][/]才能使这个工作,顺便说一句。
awk '!/[\\]/' file > temp && mv temp file

awk '!/[/]/' file > temp && mv temp file
我使用awk从列表中删除反斜杠和正斜杠。

相关问题