grep file foo | while read line ; do echo "$line" | date %s.%N ; done
Więcej czytelnie w skrypcie:
grep file foo | while read line
do
echo "$line" | date %s.%N
done
Dla każdej linii wejścia, read
wprowadzi wartość do zmiennej $line
, oraz oświadczenie while
wykona ciało pętli pomiędzy do
i done
. Ponieważ wartość jest teraz zmienna, a nie stdin, użyłem echo
, aby przenieść ją z powrotem do standardowego wejścia, ale można po prostu zrobić date %s.%N "$line"
, zakładając, że data działa w ten sposób.
Unikaj używania for line in `grep file foo`
który jest podobny, ponieważ for
zawsze rozkłada się na przestrzeni, a to staje się koszmarem dla odczytu listy plików:
find . -iname "*blah*.dat" | while read filename; do ....
zawiedzie z for
.
Nie ma problemu. Istnieją narzędzia unixowe do większości zadań masowych, w tym rzeczy takie jak zdolność grep do odczytywania wielu wzorców z pliku (-f) lub zdolność xargs do konstruowania poleceń ze stdin. –
Jeżeli nie będzie to: grep plik foo ------- NAZWA grep, egrep, fgrep, rgrep - wypisywanie linii pasujących do wzorca SKŁADNIA grep [opcje] wzorzec [plik .. .] – Xofo
Jak mogę wykonać skrypt: plik grep foo | podczas czytania linii do echo "$ line" | data% s.% N done Czy muszę wstawić plik? –