如何从字符串中删除单引号等特殊字符?

时间:2017-03-05 20:39:15

标签: regex linux perl shell

使用Sed我试过但它没有成功。 基本上,我有一个字符串说: -

输入: -

'http://www.google.com/photos'

需要输出: -

http://www.google.com

我尝试使用sed但是逃避'不可能。 我做的是: - sed' s / \' //' | sed's / photos //'

sed照片有效,但是用于'它没有。 请提出可以解决的问题。

3 个答案:

答案 0 :(得分:0)

逃离'在sed 可能通过解决方法

sed 's/'"'"'//g'
#      |^^^+--- bash string with the single quote inside
#      |   '--- return to sed string 
#      '------- leave sed string and go to bash

但是对于这份工作你应该使用tr:

tr -d "'"

答案 1 :(得分:0)

Perl Replacements的语法与sed相同,效果优于sed,默认情况下几乎安装在每个系统中,并且以相同的方式适用于所有机器(可移植性):

$ echo "'http://www.google.com/photos'" |perl -pe "s#\'##g;s#(.*//.*/)(.*$)#\1#g"
http://www.google.com/

请注意,此解决方案只保留带有http的域名,丢弃http://www.google.com/后面的所有字词

如果你想用sed做,你可以在评论中使用WiktorStribiżew建议的sed“s /'// g”。
PS:我有时会使用man ascii建议的特殊字符的ascii十六进制代码来引用特殊字符,\x27'

所以对于sed你可以这样做:

$ echo "'http://www.google.com/photos'" |sed -r "s#'##g; s#(.*//.*/)(.*$)#\1#g;"
http://www.google.com/
# sed "s#\x27##g' will also remove the single quote using hex ascii code.

$ echo "'http://www.google.com/photos'" |sed -r "s#'##g; s#(.*//.*)(/.*$)#\1#g;"
http://www.google.com      #Without the last slash

如果您的字符串存储在变量中,您可以使用纯bash实现上述操作,而不需要像sed或perl这样的外部工具:

$ a="'http://www.google.com/photos'" && a="${a:1:-1}" && echo "$a"
http://www.google.com/photos
# This removes 1st and last char of the variable , whatever this char is.    

$ a="'http://www.google.com/photos'" && a="${a:1:-1}" && echo "${a%/*}"
http://www.google.com
#This deletes every char from the end of the string up to the first found slash /. 
#If you need the last slash you can just add it to the echo manually like echo "${a%/*}/" -->http://www.google.com/

答案 2 :(得分:-1)

目前还不清楚'是否真的在你的字符串周围,尽管这应该照顾它:

str="'http://www.google.com/photos'"
echo "$str" | sed s/\'//g | sed 's/\/photos//g' 

组合:

echo "$str" | sed -e "s/'//g" -e 's/\/photos//g'

使用tr

echo "$str" | sed -e "s/\/photos//g" | tr -d \'

<强>结果

http://www.google.com

如果单引号不在你的字符串周围,它应该可以工作。