我有一个类似“info_A!__ B ???????? C_ *”的字符串。我想删除它中的特殊字符,但保留下划线和字母。我尝试使用[:word:](ASCII字母和_)字符集,但它说“无效字符集”。任何想法如何处理这个?感谢。
text="info_!_????????_*"
if [ -z `echo $text | tr -dc "[:word:]"` ]
......
答案 0 :(得分:5)
使用 (: every? : (All (A) (A -> Boolean) (Listof A) -> Boolean))
参数扩展:
bash
答案 1 :(得分:1)
sed
单行将是
sed 's/[^[:alnum:]_]//g' <<< 'info_!????????*'
给你
info_
awk
单行将
awk '{gsub(/[^[:alnum:]_]/,"",$0)} 1' <<< 'info_!??A_??????*pi9ngo^%$_mingo745'
给你
info_A_pi9ngo_mingo745
如果您不希望在输出中包含数字,请将:alnum:
更改为:alpha:
。
答案 2 :(得分:1)
我的tr
无法理解[:word:]
。我不得不这样做:
$ x=$(echo 'info_A!__B????????C_*' | tr -cd '[:alnum:]_')
$ echo $x
info_A__BC_
答案 3 :(得分:1)
不确定它是否具有强大的方式,但它适用于您的示例文本。
sed one-liner:echo "SamPlE_@tExT%, really ?" | sed -e 's/[^a-z^A-Z|^_]//g'
SamPlE_tExTreally