grep „coś” anyfiles.log> afile.csv, nie trzeba drukować ścieżki wejściowej i nazwy pliku do pliku CSV

9

Mam kilka plików dzienników, mają one ponad 30000 linii. Muszę znaleźć nazwę „domena” i zapisać w pliku CSV, ale po zapisaniu wszelkie wiersze w pliku CSV zostały dodane ścieżkę i nazwę pliku wejściowego na początku samej linii pliku CSV. Jak mogę to zrobić, jeśli nie potrzebuję dodawania ścieżki i nazwy pliku wejściowego do plików CSV.

Przykład:

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

Z pozdrowieniami, pomóżcie mi, jeśli ktoś to wie

Chaxiong
źródło

Odpowiedzi:

21

Użyj --no-filenameopcji grep.

Pomiń prefiks nazw plików na wyjściu. Jest to ustawienie domyślne, gdy do wyszukiwania jest tylko jeden plik (lub tylko standardowe wejście).

grep --no-filename "domain" 

Odniesienie: Grep Manual

Nemo
źródło
1

Zobacz man cutszczegóły, ale krótka odpowiedź brzmi grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv.

Lub zobacz man grepi zróbgrep -o "domain" /home/logs/*.log >newfile.csv

PS: grep NIE wysyła nazwy pliku, jeśli w wierszu poleceń jest tylko JEDEN plik, jak grep "domain" /home/logs/any.logw twoim przykładzie. Jeśli chcesz wymusić wyświetlanie nazw plików, grep "domain" /home/logs/any.log /dev/nullzałatwi sprawę.

waltinator
źródło
man cut... brzmi bolesnie.
Matt Fletcher