Jak odstranit řádky ze souboru

Z Znalosti

Podle Sed - Delete one or more lines from a file

Unixová funkce SED (stream editor, viz man sed) je účinný a všestranný nástroj k odstranění jednoho či více řádků ze souboru podle zadaného požadavku. Umoňuje odstranit ze souboru výrazy identifikované pomocí omezovačů (čárka, tab, mezera atd.), čísel řádků, vyhledání řetězce, výrazu nebo adresy řádku v souboru.

Syntax příkazu SED:

sed '{[/]<n>|<string>|<regex>[/]}d' <fileName>       
sed '{[/]<adr1>[,<adr2>][/]d' <fileName>
  • /.../=omezovače
  • n = číslo řádku
  • string = řetězec v řádku
  • regex = regulární výraz odpovídající hledanému vzorku
  • addr = adresa řádku (číslo nebo vzorek)
  • d = odstranit

Příklady:

Odstranit 3. řádek:

sed '3d' fileName.txt

Odstranit řádek obsahující řetězec "awk":

sed '/awk/d' filename.txt

Odstranit poslední řádek:

sed '$d' filename.txt

Odstranit všechny prázdné řádky:

sed '/^$/d' filename.txt
sed '/./!d' filename.txt

Odstranit řádek odpovídající regulárnímu výrazu (eliminací toho, který obsahuje číselné znaky s nejméně jednou číslicí na konci řádku):

sed '/[0-9/][0-9]*$/d' filename.txt

Odstranit řádky 7 až 9:

sed '7,9d' filename.txt

Totéž, ale místo adres stanovit parametry:

sed '/-Start/,/-End/d' filename.txt

Uvedené příklady změní soubor pouze ve výpisu na obrazovku (stdout1=screen).

K trvalé změně v souboru nutno použít možnosti zachovat původní soubor pomocí "-i[suffix]":

sed -i".bak" '3d' filename.txt