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

Bash 如何从字符串中删除特殊字符,但在shell脚本中保留下划线,bash,shell,Bash,Shell,我有一个字符串,类似于“info\u a!\u B?????C_*”。我想删除其中的特殊字符,但保留下划线和字母。我尝试使用[:word:](ASCII字母和u)字符集,但它显示“无效字符集”。你知道怎么处理吗?谢谢 text="info_!_????????_*" if [ -z `echo $text | tr -dc "[:word:]"` ] ...... 使用bash参数展开: $ var='info_A!__B????????C_*' $ echo "${var//[^[:aln

我有一个字符串,类似于“info\u a!\u B?????C_*”。我想删除其中的特殊字符,但保留下划线和字母。我尝试使用[:word:](ASCII字母和u)字符集,但它显示“无效字符集”。你知道怎么处理吗?谢谢

text="info_!_????????_*"
if [ -z `echo $text | tr -dc "[:word:]"` ]
......

使用
bash
参数展开:

$ var='info_A!__B????????C_*'

$ echo "${var//[^[:alnum:]_]/}"
info_A__BC_

使用
bash
参数展开:

$ var='info_A!__B????????C_*'

$ echo "${var//[^[:alnum:]_]/}"
info_A__BC_

一个
sed

sed 's/[^[:alnum:]_]//g' <<< 'info_!????????*'
一个
awk
一个班轮

sed 's/[^[:alnum:]_]//g' <<< 'info_!????????*'
awk '{gsub(/[^[:alnum:]_]/,"",$0)} 1' <<< 'info_!??A_??????*pi9ngo^%$_mingo745'

如果您不希望在输出中包含数字,则将
:alnum:
更改为
:alpha:

一个
sed
一行将是

sed 's/[^[:alnum:]_]//g' <<< 'info_!????????*'
一个
awk
一个班轮

sed 's/[^[:alnum:]_]//g' <<< 'info_!????????*'
awk '{gsub(/[^[:alnum:]_]/,"",$0)} 1' <<< 'info_!??A_??????*pi9ngo^%$_mingo745'

如果您不希望在输出中包含数字,请将
:alnum:
更改为
:alpha:

我的
tr
不懂
[:word:
。我必须这样做:

$ x=$(echo 'info_A!__B????????C_*' | tr -cd '[:alnum:]_')
$ echo $x
info_A__BC_

我的
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

不确定它是否健壮,但它对您的示例文本有效

sed一号班轮:

echo "SamPlE_@tExT%, really ?" | sed -e 's/[^a-z^A-Z|^_]//g'
SamPlE_tExTreally