16
ack foo *

行のリストを返します:

bar.txt
28: this is foo stuff

dump.txt
12: results of foo

gobs.txt
1137: more lines with foo

ack -c -l 

戻り値

3

私の質問は、どうすれば両方を表示できますか?最初の例のように行のリストと、2番目の例のように一致した行の数を数えたいですが。

4

2 に答える 2

26

使用できます

ack -hc-hの省略形--no-filename)合計数を取得します。

ackのドキュメント/マニュアルページによると:

-c、-count

通常の出力を抑制します。代わりに、入力ファイルごとに一致する行の数を出力します。が有効な場合-l、行が一致する各ファイルの行数のみが表示されます。がない-lと、一部の行数がゼロになる場合があります。

-h--no-filename)と組み合わせると、ack合計カウントが1つだけ出力されます。

これが私のために働いたものです(@Jordanの答えを拡張して)-

ack 'pattern' && ack -hc 'pattern'

または、より良い(IMO):

ack 'pattern'; ack -hc 'pattern'

私が理解している限り、を使用する&&と、2番目のコマンドは最初のコマンドが実行に戻ることに依存します。代わりに使用;すると、関係なく、両方が次々に実行されます。;この場合、より適切だと思います。

于 2016-07-15T04:24:21.697 に答える
2

ack1つのコマンドで必要なものの両方を出力する方法はありません。必要なものを取得する最も簡単な方法は、両方のコマンドを。と一緒にチェーンすることです&&

于 2012-11-14T06:51:21.690 に答える