これは簡単だと思いますので、お詫び申し上げます。Perlでは私は次のようなことをするかもしれません
my $str = "foo=23";
$str ~= m/foo=([0-9]+)/
print "foo value is " . $1
つまり、正規表現で括弧を使用して、後で試合の一部を$ 1、$ 2などとして参照できるようにします。awkで同等のものは何ですか?
また、GNU awkでは、match()
関数を使用して括弧グループを配列にキャプチャします。
str = "foo=23"
match(str, /foo=([0-9]+)/, ary)
print "foo value is " ary[1]
GNU awkでは、次のようになります。
$ cat tst.awk
BEGIN {
str = "foo=23"
val = gensub(/foo=([0-9]+)/,"\\1","",str)
print "foo value is " val
}
$
$ gawk -f tst.awk
foo value is 23
他のawkでは、他に何をするか、または一致させたくないかに応じて、[g] sub()および/またはmatch()および/またはsubstr()を使用する必要があります。例えば:
$ cat tst.awk
BEGIN {
str = "foo=23"
val = substr(str,match(str,/foo=[0-9]+/)+length("foo="))
print "foo value is " val
}
$ awk -f tst.awk
foo value is 23
ターゲットパターンが行の終わりにない場合は、substr()呼び出しで'、RLENGTH-length( "foo =")'の3番目の引数が必要になります。必要に応じて「foo=」を変数にし、それ自体にREを含めることができる場合は、さらにいくつかの手順が必要です。
使ってみませんsed
か?
echo 'foo=23' | sed 's/foo=\([0-9]\+\)/foo value is \1/'
編集:本当に使用する必要がある場合は、またはawk
を使用する必要があります。こちらをご覧ください。sub
gsub
パーティーには少し遅れるかもしれませんが、「=」をフィールド区切り文字として扱うのはどうですか?私のために御馳走を働いた!
echo foo=23 | awk -F= '{ print $1 " value is " $2 }'