使用Sed我试过但它没有成功。 基本上,我有一个字符串说: -
输入: -
'http://www.google.com/photos'
需要输出: -
http://www.google.com
我尝试使用sed但是逃避'不可能。 我做的是: - sed' s / \' //' | sed's / photos //'
sed照片有效,但是用于'它没有。 请提出可以解决的问题。
答案 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
如果单引号不在你的字符串周围,它应该可以工作。