1

行から特殊文字をキャプチャしたい:

var=`echo "#this is comment" | grep "[^a-zA-Z0-9 \t]"`
echo $var

期待される出力:#

しかし、取得:#this is comment

誰かが私を助けることができますか?

4

3 に答える 3

3

次のようなものが必要なようです。

var=`echo "#this is comment" | sed 's/[^a-zA-Z0-9 \t]//g;'`

を使用sedすると文字が置き換えられます。使用grepは文字の検索のみでした。

編集:\tコンストラクトがすべてのシステムまたはロケールに移植可能であることが保証されていないことに注意してください。sedPOSIX 正規表現をサポートしている場合は、使用し[:space:]た方がうまくいくと思います。(ありがとう@ghiti!)

于 2012-08-16T01:37:38.280 に答える
2
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 と時間を節約できます。

于 2012-08-16T01:42:08.073 に答える
0

sedこれには使用できますtrが、より良い選択です:

echo "#this is comment" | tr -d 'a-zA-Z0-9 \t'

tr[:space:]やなどの文字クラスもサポート[:alpha:]

于 2012-08-16T12:46:12.517 に答える