行から特殊文字をキャプチャしたい:
var=`echo "#this is comment" | grep "[^a-zA-Z0-9 \t]"`
echo $var
期待される出力:#
しかし、取得:#this is comment
誰かが私を助けることができますか?
次のようなものが必要なようです。
var=`echo "#this is comment" | sed 's/[^a-zA-Z0-9 \t]//g;'`
を使用sed
すると文字が置き換えられます。使用grep
は文字の検索のみでした。
編集:\t
コンストラクトがすべてのシステムまたはロケールに移植可能であることが保証されていないことに注意してください。sed
POSIX 正規表現をサポートしている場合は、使用し[:space:]
た方がうまくいくと思います。(ありがとう@ghiti!)
string="#this is comment"
var=$(echo "$string" | sed 's/[a-zA-Z0-9 ]//g')
echo "$var"
\t
携帯性が悪いので外しました。
タグが示すように、awk でこれを行いたい場合は、次のようなものを使用できます。
var=$(echo "$string" | awk '{gsub(/[a-zA-Z0-9 ]/, "")} 1')
これらは、あなたがやろうとしていることを達成するためのおそらく良い方法ではないことに注意してください. コードをさらに投稿してコンテキストを示すと、 XY 問題を回避するのに役立ちます。
もちろん、必要に応じて、このような置換を直接 bash で行うこともできます。
var=${string//[A-Za-z0-9 ]}
本当に必要のない余分なプログラムの呼び出しを避けることで、CPU と時間を節約できます。
sed
これには使用できますtr
が、より良い選択です:
echo "#this is comment" | tr -d 'a-zA-Z0-9 \t'
tr
[:space:]
やなどの文字クラスもサポート[:alpha:]