V „prázdném“ řádku můžete mít mezery nebo tabulátory. Používejte třídy POSIX s sed pro odstranění všech řádků obsahujících pouze mezery:
sed '/^[[:space:]]*$/d'
Kratší verze, která používá ERE, například s gnu sed:
sed -r '/^\s*$/d'
(Všimněte si, že sed NE podpora PCRE.)
Chybí mi awk řešení:
awk 'NF' file
Což by se vrátilo:
xxxxxx
yyyyyy
zzzzzz
Jak to funguje? Od NF znamená "počet polí", prázdné řádky mají 0 polí, takže awk vyhodnotí 0 až False a žádný řádek se nevytiskne; pokud však existuje alespoň jedno pole, vyhodnocení je True a činí awk provést jeho výchozí akci:vytisknout aktuální řádek.
sed
'/^[[:space:]]*$/d''/^\s*$/d''/^$/d'-n '/^\s*$/!p'
grep
.-v '^$'-v '^\s*$'-v '^[[:space:]]*$'
awk
/./'NF''length''/^[ \t]*$/ {next;} {print}''!/^[ \t]*$/'
sed '/^$/d' by mělo být v pořádku, očekáváte úpravu souboru na místě? Pokud ano, měli byste použít -i vlajka.
Možná tyto řádky nejsou prázdné, takže pokud je to tak, podívejte se na tuto otázku Odstraňte prázdné řádky ze souborů txt, odstraňte mezery ze začátku a konce řádku. Věřím, že toho se snažíte dosáhnout.