Nowe posty

Autor Wątek: przetwarzanie potokowe find & grep  (Przeczytany 4490 razy)

Esteban

  • Gość
przetwarzanie potokowe find & grep
« dnia: 2014-02-09, 22:06:52 »
Proszę o wskazówkę.
Utworzyłem sobie 4 pliki oto pliki i ich zawartość:
plik1.txt  eRroR
plik2.txt error
plik3.txt ERROR
plik4.txt eror
errors.txt (pusty plik)

Chciałbym aby z bieżącego katalogu wyszukano w plikach z rozszerzeniem .txt słowo error ( niezależnie od wielkości liter) i przekierowano do pliku errors.txt

Sporządziłem takie polecenie
find . -name '*\\.txt' | grep -i error>errors.txt
Problem polega na tym że po wykonaniu w pliku errors.txt pojawia mi się ./errors.txt a chciałbym żeby było "eRror error ERROR".  Niestety ten grep po find działa tak że wyszukuje fraze 'error' ale po nazwach plików lub ich ścieżkach a nie zawartości.


Uprzejmie dziękuje za pomoc.

darkdancer

  • Gość
przetwarzanie potokowe find & grep
« Odpowiedź #1 dnia: 2014-02-10, 00:12:29 »
Kod: bash [Zaznacz]

find . -name '*.txt' | xargs grep -hi error

Esteban

  • Gość
przetwarzanie potokowe find & grep
« Odpowiedź #2 dnia: 2014-02-10, 01:24:46 »
Dziękuje bardzo dodam że jeszcze można zapisać tak:
(w podanym przezemnie przykładzie działa tak samo to rozwiązanie nie wiem czy czymś się różni w innych okolicznościach)  

grep -hi error>errors.txt `find . -name '*\\.txt'`
Kolejny problem z którym postanowiłem się zmierzyć i jest powiązany z powyższym zagadnieniem:

Tym razem chciałbym aby dodano do archiwum (tar) pliki z końcówką .txt które zawierają słowo error ( niezależnie od wielkości liter)

Zbudowałem takie polecenie:
tar -cf moje.tar `find . -name '*\\.txt'| grep -hi error`
Niestety nie udaje mi się wykonać
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.
czytałem o xargs i próbowałem dodać ten element ale bez skutku :
tar -cf moje.tar `find . -name '*\\.txt'| xargs grep -i error`
w tym przypadku pojawia się takowy błąd:
tar: ./plik3.txt\\:ERROR: Cannot stat: No such file or directory
tar: ./plik1.txt\\:erRoR: Cannot stat: No such file or directory
tar: ./plik2.txt\\:error: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors
Próbowałem kilku innych wariantów ale bez skutku wkleiłem te moim zdaniem najbliższe prawidłowego rozwiązania.

Dodam że próba dodania do archiwum (tar) plików z końcówką .txt niezależnie od zawartości udaje się wykonać:
 tar -cf moje.tar `find . -name '*\\.txt'`
Niestety modyfikacje kończą się niepowodzeniem.

Dziękuje za poświęcony czas :)

arctgx

  • Gość
przetwarzanie potokowe find & grep
« Odpowiedź #3 dnia: 2014-02-10, 01:35:07 »
tar: ./plik3.txt\\:ERROR: Cannot stat: No such file or directory
Odpalasz grepa ze standardowym sposobem wyświetlania wyjścia (stąd sklejona nazwa pliku z frazą), a chcesz tylko nazwy pliku. Do tego masz opcję -l.

arctgx

  • Gość
przetwarzanie potokowe find & grep
« Odpowiedź #4 dnia: 2014-02-10, 01:40:52 »
Find zresztą nie jest potrzebny, zobacz
grep -ilr --include="*.txt" error .

Esteban

  • Gość
przetwarzanie potokowe find & grep
« Odpowiedź #5 dnia: 2014-02-10, 01:51:40 »
W taki sposób zrealizowałem to zadanie:
tar -cf moje.tar `find . | grep -i -l 'error' *.txt`
faktycznie można zrealizować to bez find, zasugerowałem się swoim poprzednim przykładem

Bardzo dziękuje za pomoc :)