ファイル名のみを収集してパラメータを取得するように出力を切り取るにはどうすればよいですか?

ファイル名のみを収集してパラメータを取得するように出力を切り取るにはどうすればよいですか?

次の形式の複数のリンクを含む複数のファイルがあります。

<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">
    <img ... />
</a>

異なる場合FOOがありますので参考にしてください。BARFNORD

さて、これらすべてのファイルに正しい属性が設定されていることを確認したいと思います。これにはack-grepとcutを使いたいです。

ack-grep -a ?parameter= *.txt

出力を取得します。

fileName.txt
1:<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">

fileName2.txt
5:<a href="http://example.com/fnord.layername.html?parameter=POIT-_-NARF-_-BAZINGA" class="poit">

しかし、私は出力を減らして次のように見えるようにする方法を知りません。

fileName.txt
parameter=FOO-_-BAR-_-FNORD

fileName2.txt
parameter=POIT-_-NARF-_-BAZINGA

ベストアンサー1

--output EXPRack-grepの引数を使用して、行の一部のみを選択的に印刷できます。 ack-grep は Perl スクリプトで、EXPR 引数は Perl 式だけであることを覚えておいてください。この場合、パターンマッチングで?行の一部のみを取得するために括弧を使用しています。最後まで"(やはり正規表現のメタ文字「?」を引用するためにバックスラッシュを使用しましたが、正規表現の最初の文字として機能することもできますが、そうしませんでした)。

ack-grep -a --output '$1' '\?(parameter=.*?)"'

最後のものを見ましたか? .*正規表現は貪欲ではないので、行の最後の代わりに最初の"と一致します。

これにより、次の出力ラインが生成されます。 ack-grepの引数を使用して先行1を抑制できます1:parameter=FOO-_-BAR-_-FNORD-h

おすすめ記事