次の形式の複数のリンクを含む複数のファイルがあります。
<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">
<img ... />
</a>
異なる場合FOO
がありますので参考にしてください。BAR
FNORD
さて、これらすべてのファイルに正しい属性が設定されていることを確認したいと思います。これには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 EXPR
ack-grepの引数を使用して、行の一部のみを選択的に印刷できます。 ack-grep は Perl スクリプトで、EXPR 引数は Perl 式だけであることを覚えておいてください。この場合、パターンマッチングで?行の一部のみを取得するために括弧を使用しています。最後まで"(やはり正規表現のメタ文字「?」を引用するためにバックスラッシュを使用しましたが、正規表現の最初の文字として機能することもできますが、そうしませんでした)。
ack-grep -a --output '$1' '\?(parameter=.*?)"'
最後のものを見ましたか? .*正規表現は貪欲ではないので、行の最後の代わりに最初の"と一致します。
これにより、次の出力ラインが生成されます。 ack-grepの引数を使用して先行1を抑制できます1:parameter=FOO-_-BAR-_-FNORD
。-h