2016-05-06 5 views
1

"info_A!__ B ???????? C_ *"のような文字列がある。私はそれから特殊文字を削除したいが、下線と手紙を残す。私は[:word:](ASCII文字と_)文字セットで試しましたが、 "無効な文字セット"と表示されます。どのようにこれを処理するための任意のアイデア?ありがとう。文字列から特殊文字を削除するが、シェルスクリプトにアンダースコアを続ける方法

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

答えて

5

使用bashパラメータ展開:

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

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

ありがとうございました。これは私のために働いた.. – jlp

1

sedワンライナーは

sed 's/[^[:alnum:]_]//g' <<< 'info_!????????*' 

だろうが、あなたに

info_ 

を与えますワンライナーは、あなたが:alpha::alnum:を変更する出力内の数字を持ってしたくない場合は

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

はあなたに

info_A_pi9ngo_mingo745 

を与えるだろう。

1

私のtrは、[:word:]を理解できません。私は次のようにしなければなりませんでした:

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

堅牢な方法ではあるが、サンプルテキストではうまくいきませんか。

はワンライナーをセッド:

echo "[email protected]%, really ?" | sed -e 's/[^a-z^A-Z|^_]//g' 
SamPlE_tExTreally 
関連する問題