Ako poznať počet zobrazených riadkov nasledujúceho príkazu "mačka"?
cat anyfile.txt | grep anypattern
Použitím | wc -l
sa vyhnú zobrazeniu príkazového výstupu. A chcem udržať výstup zobrazený
odpovede:
1 pre odpoveď č. 1Tu je jeden spôsob, ako to urobiť pri používaní grep:
grep "anypattern" anyfile.txt | awk "END{print NR}1"
EDIT: Uložiť počet riadkov v premennej shell:
Metóda 1:
count=$(grep "anypattern" anyfile.txt | awk "END{print NR > "/dev/stderr"}1" 3>&1 1>&2 2>&3)
Metóda 2:
grep "anypattern" anyfile.txt | awk "END{print NR > "/tmp/_temp"}1"
count=$(</tmp/_temp)
1 pre odpoveď č. 2
Jednosmerka:
awk "/anypattern/{x++;print};END{print x}" anyfile.txt
1 pre odpoveď č. 3
použitie tee
presmerovať do wc
:
printf " line %dn" {1..4} | tee >(wc -l)
line 1
line 2
line 3
line 4
4
1 pre odpoveď č. 4
grep anypattern anyfile | tee /dev/stderr | wc -l
Toto bude odvádzať výstup z grep
na tee
ktorý potom zapíše do štandardného výstupu stdout
a štandardná chyba stderr
, a nakoniec sa zobrazí štandardná chyba pri štandardnom výstupe wc
ktorý zobrazí počet riadkov.
Príklad:
grep stack /usr/share/dict/cracklib-small | tee /dev/stderr | wc -l
haystack
smokestack
stack
stacked
stacking
stack"s
stacks
7
0 pre odpoveď č. 5
grep anypattern anyfile.txt 1>&2 | wc -l
Výraz 1>&2
poveruje bash
duplikovať stdout
(fd = 1) takým spôsobom, že všetko, čo je napísané z predchádzajúceho príkazu stdout
ide stderr
(fd = 2).
Prevádzkovateľ presmerovania |
píše všetko, z ktorého pochádza stdout
na stdin
nasledujúceho príkazu vidíte výstup stderr
na termináli.
0 pre odpoveď č. 6
TL; DR
Na mačka príkaz Zreťazí súbory, takže ak ste "re pokladoch mačka na súbor (ktorý je UUOC) čísla riadkov vyhral "t niečo užitočného vlastne znamená po prečítaní prvého súboru.Môžete vidieť v akcii z prvej ruky pomocou --number
vlajka s GNU mačka.
použitie mačka podľa GNU Coreutils
Ak ste "re pomocou GNU mačka, potom stačí použiť --number
flag. Napríklad:
$ cat --number <(echo one) <(echo two)
1 one
2 two
Zobrazí sa výstup, spolu s jeho aktuálne číslo riadku výstupného prúdu.Všimnite si, že je to úplne sekvenčné: v tomto príklade, aj keď "dva" je prvý riadok druhý súbor, je linka číslo dve reťazové výstupu.
Použitie Grep vlajky priamo
Ak ste "re pomocou GNU grep, môžete získať názvy a čísla kolekcie súborov riadkov pomerne ľahko.Napríklad:
$ grep --line-number --with-filename root /etc/passwd /etc/group
/etc/passwd:1:root:x:0:0:root,,,:/root:/bin/bash
/etc/group:1:root:x:0:
GNU grep bude spracovávať jednotlivé súbory, viaceré súbory a súbor kvapôčky, tak tam "s netreba vôbec mačka.