grep «что-то» anyfiles.log> afile.csv, не нужно печатать путь ввода и имя файла в файл CSV

9

У меня есть несколько файлов журналов, в них более 30000 строк. Мне нужно найти имя «домен» и сохранить в CSV-файле, но после сохранения в строку CSV были добавлены все строки в CSV-файле пути и имени входных файлов в начале самой строки CSV-файла. Как это сделать, если мне не нужно добавлять путь и имя входного файла в файлы CSV.

Пример:

Input
#cat /home/log/any.log

any things..domain, anything
any things..domain, anything
any things..domain, anything


grep "domain" /home/logs/any.log > newfile.csv

Output:
#cat newfile.csv
/home/logs/any.log:domain
/home/logs/any.log:domain
/home/logs/any.log:domain


#----My requirement output is:

cat newfile.csv
domain
domain
domain

С уважением, пожалуйста, помогите мне, если кто-нибудь знает

Chaxiong
источник

Ответы:

21

Используйте --no-filenameопцию для grep.

Подавить префикс имен файлов на выходе. Это значение по умолчанию, когда для поиска требуется только один файл (или только стандартный ввод).

grep --no-filename "domain" 

Ссылка: Руководство Grep

Nemo
источник
1

Подробности man cutсмотрите, но краткий ответ grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv.

Или посмотреть man grepи сделатьgrep -o "domain" /home/logs/*.log >newfile.csv

PS: grep НЕ выводит имя файла, если в командной строке есть только ОДИН файл, как grep "domain" /home/logs/any.logв вашем примере. Если вы хотите принудительно вывести имена файлов, grep "domain" /home/logs/any.log /dev/nullто добьетесь цели.

waltinator
источник
man cut... звучит больно.
Мэтт Флетчер