4

次のようなクラスが与えられた場合

[:digit:]

出力を

0123456789

このメソッドは、すべての POSIX 文字クラスで機能するはずです。これが私が試したことです

$ printf %s '[:digit:]'
[:digit:]

§ 文字クラス

4

4 に答える 4

4

もっと良い方法があると思いますが、力ずくの方法を次に示します。

for i in {0..127}; do 
    char=$(printf \\$(printf '%03o' "$i"))
    [[ $char =~ [[:alpha:]] ]] && echo "$char"
done

すべての 10 進文字値をループし、それらを対応する ASCII 文字に変換して、文字クラスに対してテストします。

範囲が間違っている可能性がありますが、チェックは機能しているようです。

他の人がコメントで述べたように、この場合==の代わりに演算子を使用することもでき=~ます。これは少し速いかもしれません。

于 2014-10-23T18:35:38.657 に答える
1
$ seq 126 | awk '{printf "%c", $0}' | grep -o '[[:digit:]]'
0
1
2
3
4
5
6
7
8
9
于 2014-10-23T19:14:22.627 に答える
1
于 2014-10-23T19:32:13.937 に答える