Как мога да използвам xargs за рекурсивно анализиране на имейл адреси от текстови/html файлове?

Опитах се рекурсивно да анализирам имейл адреси от директория с текстови/html файлове с xargs и grep, но тази команда продължава да включва пътя (просто искам имейл адресите в получения файл emails.csv).

find . -type f | xargs grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" >>  ~/emails.csv

Можете ли да обясните какво не е наред с моята команда grep? Нямам нужда това да бъде сортирано или уникално. Искам да съпоставя всички срещания на имейл адреси във файлове. Трябва да използвам xargs, защото анализирам имейли в текстови файлове на стойност 20 GB.

Благодаря.


person Aria Theluse    schedule 17.08.2015    source източник
comment
Вероятно бих поставил регулярния израз в единични кавички, за да избегна интерполацията на регулярния израз в shell.   -  person thrig    schedule 18.08.2015
comment
Опитайте да добавите в -h като опция към grep за потискане на имената на файловете - добавя ги автоматично, когато търсите в повече от един файл.   -  person Mark Setchell    schedule 18.08.2015
comment
-h се справи! Благодаря ти @MarkSetchell   -  person Aria Theluse    schedule 18.08.2015
comment
Добавих го като отговор, за да могат всички да го видят лесно.   -  person Mark Setchell    schedule 18.08.2015


Отговори (1)


Когато кажете на grep да търси в повече от един файл, той добавя съответното име на файл пред резултата от търсенето. Опитайте следното, за да видите ефекта...

Първо, потърсете в един файл:

grep local /etc/hosts
# localhost is used to configure the loopback interface
127.0.0.1   localhost

Сега потърсете в два файла:

grep local /etc/hosts /dev/null
/etc/hosts:# localhost is used to configure the loopback interface
/etc/hosts:127.0.0.1    localhost

За да потиснете името на файла, в което е намерено съвпадението, добавете превключвателя -h към grep по този начин

grep -h <something> <somewhere>
person Mark Setchell    schedule 18.08.2015