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 grepdla 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, nlub 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ć sedpolecenia 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: :bufdoPolecenie 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?