1

我需要从 bash 中的字符串中删除转义字符。我得到一个数据结构,其中包含带有 / 转义的 url 路径,因此我收到了常规链接:

http://stackoverflow.com/questions/ask

作为一个转义/:

http:\/\/stackoverflow.com\/questions\/ask

现在我需要从第二个链接中删除 \。为此,我尝试使用 sed

 `echo '"'${paths[$index]}'"' | sed "s@\\@@g"`

但我收到一个错误:

sed: -e expression #1, char 6: unterminated `s' command

如果我将 \\ 替换为 ie。_ 它就像一个魅力,并删除字符串中所有出现的 _。如何使用 sed 去除字符串中的转义字符?

4

4 回答 4

6

试试这个:

.......|sed 's@\\@@g'

或者:

.......|sed "s@\\\\@@g"

编辑添加测试输出:

kent$  echo "http:\/\/stackoverflow.com\/questions\/ask"|sed "s@\\\\@@g"
http://stackoverflow.com/questions/ask

kent$  echo "http:\/\/stackoverflow.com\/questions\/ask"|sed 's@\\@@g'  
http://stackoverflow.com/questions/ask
于 2013-03-06T10:32:24.853 回答
2

您的问题不清楚您想要哪种方式,所以这是两种方式:

$ sed 's@/@\\/@g' <<< "http://stackoverflow.com/questions/ask"
http:\/\/stackoverflow.com\/questions\/ask

$ sed 's@\\/@/@g' <<< "http:\/\/stackoverflow.com\/questions\/ask"
http://stackoverflow.com/questions/ask
于 2013-03-06T10:35:19.397 回答
2

你不需要使用sed.

paths[index]=${paths[index]//\\/}

或者干脆

echo ${paths[index]//\\/}

在不就地修改值的情况下查看结果。

于 2013-03-06T13:54:03.963 回答
0

你可以使用这个:

sed 's@\\@@g'

但问题是当你在字符串中遇到你真正想要的反斜杠时,它被转义了。在这种情况下 :

sed 's/\\\\/\x1/' |sed 's/[\]//g' | sed 's/\x1/\\/g'

用临时字符 [SOH] 替换双反斜杠,替换所有其他反斜杠,然后恢复所需的反斜杠。

于 2016-08-05T11:46:02.180 回答