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.