grep "щось" anyfiles.log> afile.csv, не потрібно друкувати шлях введення та ім'я файлу у файл CSV


9

У мене є кілька файлів журналів, у них більше 30000 рядків. Мені потрібно знайти ім'я "домен" та зберегти у файлі 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

З повагою, будь ласка, допоможіть мені, якщо хтось знає

Відповіді:


21

Використовуйте --no-filenameваріант для grep.

Придушити префіксацію імен файлів на виході. Це за замовчуванням, коли для пошуку потрібен лише один файл (або лише стандартний ввід).

grep --no-filename "domain" 

Довідка: Посібник з грепа


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зробіть трюк.


man cut... звучить болісно.
Метт Флетчер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.