我有一个类似于"info_a!__B????C_*"的字符串。我想删除其中的特殊字符,但保留下划线和字母。我尝试使用[:word:](ASCII字母和_)字符集,但它显示"无效字符集"。知道怎么处理吗?谢谢
text="info_!_????????_*"
if [ -z `echo $text | tr -dc "[:word:]"` ]
......
使用bash
参数展开:
$ var='info_A!__B????????C_*'
$ echo "${var//[^[:alnum:]_]/}"
info_A__BC_
sed
的一个衬垫将是
sed 's/[^[:alnum:]_]//g' <<< 'info_!????????*'
给你
info_
awk
的一个线性将是
awk '{gsub(/[^[:alnum:]_]/,"",$0)} 1' <<< 'info_!??A_??????*pi9ngo^%$_mingo745'
给你
info_A_pi9ngo_mingo745
如果您不希望在输出中包含数字,则将:alnum:
更改为:alpha:
。
我的tr
不理解[:word:]
。我不得不这样做:
$ x=$(echo 'info_A!__B????????C_*' | tr -cd '[:alnum:]_')
$ echo $x
info_A__BC_
不确定它是否稳健,但它适用于您的示例文本。
sed一行:
echo "SamPlE_@tExT%, really ?" | sed -e 's/[^a-z^A-Z|^_]//g'
SamPlE_tExTreally