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?
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?
Odpowiedzi:
Możesz przekazywać nazwy plików do grep
:
grep cow foo * .txt
To „złe”, ponieważ używasz cat
kiedy tego nie potrzebujesz, naprawdę.
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ć.