Chcę usunąć wszystkie puste linie z pliku. Nawet jeśli linia zawiera spacje lub tabulatory, należy ją również usunąć.
źródło
Chcę usunąć wszystkie puste linie z pliku. Nawet jeśli linia zawiera spacje lub tabulatory, należy ją również usunąć.
Tylko grep
dla niepustych:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
, wewnątrz zakresów znaków ( [...]
), nazywa się klasą znaków POSIX. Jest kilka takich [:alpha:]
, jak [:digit:]
... [:blank:]
dopasowuje białą spację w poziomie (w ustawieniach POSIX, to jest spacja i tabulator, ale w innych lokalizacjach może być więcej, jak wszystkie znaki odstępów w poziomie Unicode w ustawieniach UTF8), podczas gdy [[:space:]]
dopasowuje poziome i pionowe białe znaki spacji (takie same jak znaki [:blank:]
plus, takie jak tabulacja pionowa, wysuw strony ...)
grep '[:blank:]'
Wrócą linie, które zawierają wszelkie znaki, :
, b
, l
, a
, n
lub k
. Klasy postaci są rozpoznawane tylko w zestawie [...]
i ^
wewnątrz [...]
neguje zestaw. Więc [^[:blank:]]
oznacza dowolny znak, ale te puste.
$
koniec linii?[^[:blank:]]$
dopasowuje tylko linie kończące się niepustym. Chcemy, aby wiersze zawierały niepuste miejsca w dowolnym miejscugrep -E '\S'
nie działałoby?Oto
awk
rozwiązanie:Z
awk
,NF
ustawiane tylko na niepustych liniach. Gdy ten warunek się zgadza,awk
domyślna czynnośćprint
spowoduje wydrukowanie całej linii.źródło
Co powiesz na:
lub
to znaczy
Dla każdej linii zamień:
^
”)[[:blank:]]
”) zero lub więcej razy („*
”)$
”)Więcej informacji na temat :: blank :: i innych znaków specjalnych na stronie http://www.zytrax.com/tech/web/regex.htm#special
źródło
[[:space:]]
zawiera zakładki. Jeśli tak się nie stanie, wyrażenie regularne zawiedzie, jeśli spacja będzie następować po karcie.wctype(3)
iisalpha(3)
opisują, jakie klasy znaków będą pasować.Możesz użyć
sed
polecenia do usunięcia pustych linii:To polecenie usuwa wszystkie puste wiersze z pliku „w”
źródło
Wygląda na to, że znalazłem taki nie tak szybki, ale w końcu zabawny:
| xargs -L1
źródło
Wypróbuj ex -way:
W przypadku wielu plików (edytuj na miejscu):
Uwaga:
:bufdo
Polecenie to nie POSIX .Bez modyfikacji pliku (wystarczy wydrukować na standardowym wyjściu):
źródło
Użyj następującego polecenia:
który usuwa wszystkie wiersze, w tym spacje lub tabulatory.
W przeciwnym razie, nie uwzględniając linii ze spacjami / tabulatorami, użyj:
Na przykład:
Zobacz też:
sed
: Usuń puste linie za pomocą sedawk
: Usuń puste linie za pomocą awkźródło