7

これは簡単だと思いますので、お詫び申し上げます。Perlでは私は次のようなことをするかもしれません

my $str = "foo=23";
$str ~= m/foo=([0-9]+)/
print "foo value is " . $1

つまり、正規表現で括弧を使用して、後で試合の一部を$ 1、$ 2などとして参照できるようにします。awkで同等のものは何ですか?

4

4 に答える 4

6

また、GNU awkでは、match()関数を使用して括弧グループを配列にキャプチャします。

str = "foo=23"
match(str, /foo=([0-9]+)/, ary)
print "foo value is " ary[1]
于 2012-10-21T18:12:39.733 に答える
5

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を含めることができる場合は、さらにいくつかの手順が必要です。

于 2012-10-21T16:04:11.573 に答える
1

使ってみませんsedか?

echo 'foo=23' | sed 's/foo=\([0-9]\+\)/foo value is \1/'

編集:本当に使用する必要がある場合は、またはawkを使用する必要があります。こちらをご覧ください。subgsub

于 2012-10-21T15:26:13.637 に答える
1

パーティーには少し遅れるかもしれませんが、「=」をフィールド区切り文字として扱うのはどうですか?私のために御馳走を働いた!

echo foo=23 | awk -F= '{ print $1 " value is " $2 }'
于 2014-07-07T11:47:38.500 に答える