Nowe posty

Autor Wątek: sed czyszcnie pustych weirszy  (Przeczytany 2140 razy)

lwiaros

  • Gość
sed czyszcnie pustych weirszy
« dnia: 2013-06-10, 06:35:24 »
witam
czemu polecienie
sed -n '/^$/d'  plik.txt > plik.txt
czyści cały plik tekstowy a nie tylko puste wiersze i go zapisuje?

alvaro

  • Gość
sed czyszcnie pustych weirszy
« Odpowiedź #1 dnia: 2013-06-10, 06:57:21 »
Jeśli chcesz operować bezpośrednio na pliku (edycja w miejscu z zapisem zmian do oryginalnego pliku) użyj przełącznika -i:
sed -i -r -e '/^$/d' plik.txt
Jeśli dodatkowo chcesz usunąć wiersze zawierające tylko białe znaki to użyj:
sed -i -r -e '/^[[:blank:]]*$/d' plik.txt
Niepotrzebnie używałeś przełącznika -n.
Cytując za Wikipedią:
Cytuj
-n - na wyjściu będą wypisywane jedynie linie, na których wykonano komendę 'p' lub 's' z parametrem 'p'.
Na dobrą sprawę wystarczy:
sed -i '/^$/d' plik.txt
czy (z usuwaniem linii zawierających tylko białe znaki):
sed -i '/^[[:blank:]]*$/d' plik.txt

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3067
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
sed czyszcnie pustych weirszy
« Odpowiedź #2 dnia: 2013-06-10, 08:09:32 »
Dodatkowo nigdy nie używaj narzędzi typu sed, awk, grep itd w taki sposób:
NARZĘDZIE plik
albo, jeżeli narzędzie akceptuje plik jako argument
NARZĘDZIE plik >plik
Dlaczego? Proste. Operator > jest wykonywany przed uruchomieniem podprocesu. Czyści plik, więc podproces (awk/sed/whatever) widzi już plik pusty i nie ma co robić.

Reszta tak jak pisał alvaro. Parametr -n sprawia, że do wyniku pojechałyby tylko linijki pasujące do wzorca, ale te akurat chcesz wywalić. GNU sed ma parametr -i (od inplace) - wtedy zamiast wyświetlać wynik na ekranie, modyfikuje oryginał.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

lwiaros

  • Gość
sed czyszcnie pustych weirszy
« Odpowiedź #3 dnia: 2013-06-10, 19:19:41 »
na wstępie chciałbym podziękować alvaro  pkraszewski o to chodziło, sam bym się męczył jeszcze trochę zanim bym się doszukał , początki są trudne ale powoli i się obczai sed , jeszcze raz dzięki