awkから行の最初のアルファベット文字インデックスを抽出する方法は?
私は望んだ
echo 123XYZ | awk '{print index($1,"[:alpha:]")}'
4を返します。
答え1
GNU awk マニュアル正規表現は許可されていませんindex()
。
インデックス(in,find)
[...]
BWK awk と gawk の場合、照会に正規表現定数を使用することは致命的なエラーです。他の実装では、単に正規表現定数を "$0 ~ /regexp/" を意味する式として扱うことでこれを受け入れます。 (DC)
あなたが使用できるmatch()
:
echo "123XYZ" | awk '{match($0,/[[:alpha:]]/); print RSTART}'
4
これは一番左の最初のアルファベット文字と一致します。 a の後にはmatch()
組み込み変数がRSTART
あり、RLENGTH
一致する文字列のインデックスと長さが含まれているため、最初の変数を印刷します。
注:これは、[:alpha:]
自己定義の正規表現と一致しない文字タイプです。 「1つのアルファベット文字」を意味するには、[]
次のように囲む必要があります[[:alpha:]]
。
からman awk
:
文字クラスは、文字リスト角かっこ内の正規表現内でのみ有効です。文字クラスは、[:、クラスを表すキーワード、および:]で構成されます。