スポンサーリンク

awkで正規表現にマッチした文字列を抽出して表示

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

match()関数で正規表現にマッチさせると、RSTARTには、検索対象が検出された最初の位置が、
RLENGTHには、検索対象が検索された文字列の長さが格納されます。
substr()で位置と長さを指定して文字列を抽出して、あとはprint表示させます。

参考:match()関数とsubstr()関数で文字列を切り出す

例えば、下記のin.txtがあったとします。

$ cat in.txt 
awkfind0123456789awk
1234567890awk1234567890

下記がサンプルコードになります。

$ cat sample.awk 
#!/bin/sh

cat in.txt | awk '
    {
        match($0, /[1-9]+/)
        print substr($0, RSTART, RLENGTH)
        
        match($0, /[a-z]+/)
        print substr($0, RSTART, RLENGTH)
    }
'

下記が実行結果になります。
$ ./sample.awk 
123456789
awkfind
123456789
awk

スポンサーリンク