7

入力レコードの一部にアクセスするために、パターンと同じアクションを実行していることに気付くことがよくあります。

/^Compiled from \"(.*)\"$/ {
    file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g");
    print file_name;
}

したがって、正規表現のマッチングは2回行われます。\\1再度照合せずにアクションでアクセスできる方法はありますか?

私はパターンマッチングと余分なコードの両方を削減しようとしています。

4

1 に答える 1

9

sed残念ながら、GAWKには、空を使用する繰り越し機能がありません//

sed '/\(patt\)ern/ {s//new\1/}' inputfile

ただし、変数は最近発明されたものであり、この目的にのみ使用できるため、喜ぶことができます。

BEGIN {
    pattern = "^Compiled from \"(.*)\"$"
}
$0 ~ pattern {
    file_name = gensub(pattern, "\\1", "");
    print file_name;
}
于 2012-04-20T23:25:46.523 に答える