w skrypcie bash, mam listę linii w pliku pragnę grep a następnie wyświetlany na standardowe wyjście, które jest najłatwiej zrobić z jakimś czasie przeczytać:grep, inny komunikat Druk na żadnym meczów
grep "regex" "filepath" | while read line; do
printf "$line\n"
done
Chciałbym jednak poinformować użytkownika, że grep nie dopasował żadnych linii. Wiem, że można to zrobić przez updating a variable inside the loop, ale wydaje się, że o wiele bardziej eleganckie podejście (jeśli to możliwe) byłoby próbą odczytania linii w pętli "do", a jeśli nie było wyjścia, mógłby zostać wyświetlony komunikat o błędzie.
To była moja pierwsza próba:
grep "regex" "filepath" | until [[ -z ${read line} ]]; do
if [[ -z $input ]]; then
printf "No matches found\n"
break
fi
printf "$line\n"
done
Ale w tym przypadku polecenie odczytu jest zniekształcone, a ja nie byłem pewien inny sposób wyrażenie kwerendy. Czy to podejście jest możliwe, a jeśli nie, czy istnieje bardziej odpowiednie rozwiązanie problemu?
W twoim pierwszym przykładzie, tylko grep jest potrzebny i masz takie samo zachowanie. Czy jest to tylko przykład lub czy naprawdę chcesz to zrobić? – jordanm
Czy to? Czy możesz pokazać, jak? Nadal jestem całkiem nowy, aby bashować i nie rozumiem, jak używać grep do tego zachowania. Kod, który napisałem, pokazuje wynik końcowy, który próbuję osiągnąć, by odpowiedzieć na twoje pytanie. Ah kot jest zbędny. Usunięto, dziękuję. – seraththundhuil
grep domyślnie drukuje pasujące linie na standardowe wyjście, dlatego działająca pętla while/read czyta standardowe wejście. Po prostu uruchom 'grep 'regex" "filepath" 'i powinieneś zobaczyć swoje pasujące linie. –