Jak mogę uprościć to polecenie w systemie Linux składającym się z kota potokowanego do grep?

-1

Jak mogę uprościć to polecenie w systemie Linux składającym się z cat podłączony do grep.

cat foo*.txt | grep cow

Powiedziano mi, że to niewłaściwy sposób. Dlaczego?

Belmark Caday
źródło
3
To nie jest tak samo „złe” jak marnotrawstwo. To bezpłatne korzystanie z kota.
Hennes

Odpowiedzi:

6

Możesz przekazywać nazwy plików do grep:

grep cow foo * .txt

To „złe”, ponieważ używasz cat kiedy tego nie potrzebujesz, naprawdę.

Patrice Levesque
źródło
3

Z szacunkiem dla pracy poprzednich autorów chciałbym podkreślić, że te dwa polecenia robią (nieco) różne rzeczy. Komenda OP łączy wszystkie pliki foo * .txt i przeszukuje połączony wynik pewnego razu aby zobaczyć, czy pojawia się napis „krowa”. Komenda @Patrice Levesque wykonuje wyszukiwanie N, po jednym dla każdego pasującego N pliku.

Choć co prawda niejasne i wymyślone, możliwe jest tworzenie przypadków, w których polecenie OP działa i nieudane polecenie nie powiedzie się:

$ for C in w c o; do printf '%s' "$C" > foo-$C.txt; done
$ grep cow foo*.txt
$ cat foo*.txt | grep cow
cow
$ rm foo*
$ printf "wilco" > foo-1.txt
$ cp foo-1.txt foo-2.txt
$ grep cow foo*.txt
$ cat foo*.txt | grep cow
wilcowilco

Chodzi mi o to, że może nie bądź zły sposób, aby to zrobić, w zależności od tego, co próbujesz zrobić.

Jim L.
źródło
1
To bardzo dobra odpowiedź.
JakeGould