我不明白我在做错了什么:
$ cat fixnames.sh
#!/bin/sh
for i in *mp3
do
j=`echo $i | sed -e's/ /_/g'`
j=`echo $j | sed -e's/_(...)_/_/g'`
j=`echo $j | sed -e's/\'//g'`
echo $j
done
$ ./fixnames.sh
./fixnames.sh: 1: Syntax error: Unterminated quoted string
我想/bin/sh
行不喜欢......
j=`echo $j | sed -e's/\'//g'`
...那我怎么想删除'
?
答案 0 :(得分:2)
shell不是sed
给出麻烦。您无法在单引号字符串中转义单引号。
for i in *mp3
do
j=$(echo $i | sed -e 's/ /_/g' -e 's/_(...)_/_/g' -e "s/'//g")
echo $j
done
在这种情况下,在表达式周围使用双引号就足够了。其他时候,你需要更加小心使用双引号(stray $
需要转义等),或者使用规范序列'\''
在单引号字符串中嵌入单引号:
-e 's/'\''//g'
'\''
序列停止当前单引号字符串,插入转义单引号(实际上只是单引号),并恢复单引号字符串。
请注意,我将sed
的3次调用合并为一次;我喜欢-e
选项,但很多人会使用分号来分隔三个命令。另请注意使用$(...)
优先于后引号。