Chcę usunąć wszystkie puste linie z pliku. Nawet jeśli linia zawiera spacje lub tabulatory, należy ją również usunąć.
Chcę usunąć wszystkie puste linie z pliku. Nawet jeśli linia zawiera spacje lub tabulatory, należy ją również usunąć.
Odpowiedzi:
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.
[^[:blank:]]$
dopasowuje tylko linie kończące się niepustym. Chcemy, aby wiersze zawierały niepuste miejsca w dowolnym miejscu
grep -E '\S'
nie działałoby?
Co powiesz na:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
lub
sed -e '/^[[:blank:]]*$/d' source_file > newfile
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
[[: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)
i isalpha(3)
opisują, jakie klasy znaków będą pasować.
Możesz użyć sed
polecenia do usunięcia pustych linii:
sed '/^$/d' in > out
To polecenie usuwa wszystkie puste wiersze z pliku „w”
Wygląda na to, że znalazłem taki nie tak szybki, ale w końcu zabawny:
| xargs -L1
Wypróbuj ex -way:
ex -s +'v/\S/d' -cwq test.txt
W przypadku wielu plików (edytuj na miejscu):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Uwaga: :bufdo
Polecenie to nie POSIX .
Bez modyfikacji pliku (wystarczy wydrukować na standardowym wyjściu):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
Użyj następującego polecenia:
grep '\S' FILE
który usuwa wszystkie wiersze, w tym spacje lub tabulatory.
W przeciwnym razie, nie uwzględniając linii ze spacjami / tabulatorami, użyj:
grep . FILE
Na przykład:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
Zobacz też:
sed
: Usuń puste linie za pomocą sedawk
: Usuń puste linie za pomocą awk
$
koniec linii?