我目前使用bash未解决的问题是如何替换[:punct:]
类中的所有字符,即
[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]
,每个都有相同的字符,用反斜杠转义。例如,我想让^h?e.l*l+o:
变成^h?e.l*l+o:
。
我可以用循环的多行方式来做。有没有可能用一种更简洁优雅的方式来做这件事呢?
谢谢,卢卡
可以使用sed
吗?
echo '^h?e.l*l+o:' | sed 's/([[:punct:]])/\1/g'
如果没有sed
,我想不出除了循环字符之外的任何东西:
s='^h?e.l*l+o:'
o=''
for ((i=0; i<${#s}; i++)) ; do
c=${s:i:1}
[[ $c =~ [[:punct:]] ]] && o+=\
o+=$c
done
echo "$o"
另一种可能是使用Perl的quotemeta:
echo '^h?e.l*l+o:' | perl -lne 'print quotemeta'
-l
处理换行。-n
逐行处理输入