GNU/Linux >> Znalost Linux >  >> Linux

Odstraňte prázdné řádky pomocí sed

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.


Linux
  1. Shoda víceřádkového vzoru pomocí Sed, Awk nebo Grep?

  2. sed spojí čáry dohromady

  3. Jak použít sed k odstranění pouze dvojitých prázdných řádků?

  1. Nahradit slovo nebo číslo ve větě, která je menší než 8, pomocí Awk nebo Sed?

  2. Najděte a nahraďte text v souboru mezi rozsahy řádků pomocí sed

  3. Použití grep vs awk

  1. Jak odstranit více náhodných řádků z textového souboru pomocí Sed?

  2. Používáte zalamování slov s Mc?

  3. Jak odstranit prvních N řádků souboru Ascii pomocí příkazů Shell?