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
