2009-03-11 4 views
3
ls -ltr|grep 'Mar 4'| awk '{print $9 }'|zcat -fq |grep 12345 

Я хочу, чтобы найти все файлы, измененные на определенную дату, а затем zcat их и выполнить поиск в строке для строки.zcat pipe to grep

не работает, потому что он ищет имя файла для строки, а не самого файла.

Любая помощь?

M

ответ

1

Попробуйте использовать find вместо этого. И/или xargs.

2

Используйте xargs для запуска Grep на выходе имена файлов на AWK:

ls -ltr | grep 'Mar 4' | awk '{print 9}' | xargs zcat -fq | grep 12345 

Или, я думаю, запустить остальную часть трубы от самого AWK.

1

Если я правильно прочитал вашу командную строку, ее zcat пытается распаковать имена файлов вместо их содержимого. Используйте xargs для решения этой проблемы:

ls -ltr|grep 'Mar 4'| awk '{print $9 }'|xargs zcat -fq |grep 12345 
0

В дополнение к изобразительному ответов об использовании xargs или find, вы можете также избавиться от дополнительного процесса за счет устранения zcat и трубопроводов к zgrep или grep -Z вместо этого.

+0

В моей системе (OS X) grep -Z не работает так, как вы думаете. –

+0

Видимо, не на Linux у меня тоже есть. К сожалению. zgrep - лучший выбор. – dwc