如何使用sed从bash中删除字符串中的转义字符?

时间:2013-03-06 10:29:27

标签: bash unix sed escaping character

我需要从bash中的字符串中删除转义字符。我得到一个数据结构,其中包含/ escape的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 个答案:

答案 0 :(得分:2)

试试这个:

.......|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

答案 1 :(得分: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

答案 2 :(得分:1)

您无需使用sed

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

或只是

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

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

答案 3 :(得分:0)

您可以使用:

sed 's@\\@@g'

但问题是当你在字符串中遇到实际需要的反斜杠时,却会被转义。在那种情况下:

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

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