如何从字符串中删除特殊字符,但在shell脚本中保留下划线



我有一个类似于"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

相关内容

最新更新