我需要从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删除字符串中的转义字符?
答案 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]替换双反斜杠,替换所有其他反斜杠,然后恢复所需的反斜杠。