Ответ 1
grep file foo | while read line ; do echo "$line" | date %s.%N ; done
Более читаемо в script:
grep file foo | while read line
do
echo "$line" | date %s.%N
done
Для каждой строки ввода read
значение будет помещено в переменную $line
, а оператор while
выполнит тело цикла между do
и done
. Поскольку значение теперь находится в переменной, а не stdin, я использовал echo
, чтобы вернуть его обратно в stdin, но вы могли бы просто сделать date %s.%N "$line"
, предполагая, что дата работает именно так.
Избегайте использования for line in `grep file foo`
, которое похоже, потому что for
всегда разбивается на пробелы, и это становится кошмаром для чтения списков файлов:
find . -iname "*blah*.dat" | while read filename; do ....
завершится с for
.