it-swarm-eu.dev

Odstraňte poslední řádek ze souboru

Používám sed k rychlému smazání řádků se specifickou pozicí jako

sed '1d'
sed '5d'

Ale co když chci vymazat poslední řádek souboru a nevím počet řádků (vím, že to mohu získat pomocí wc a několika dalších triků).

V současné době k tomu použijeme řešení s head a tailcombined s wc. Máte nějaké rychlé zvraty?

51
mtk

v sed $ je poslední řádek, takže poslední řádek smažete:

sed '$d' <file>
96
h3rrmiller

$ za poslední řádek:

sed '$d' file
32
Guru

cat file.txt | head -n -1 > new_file.txt

Dejte si pozor, zdá se, v závislosti na posledním řádku file.txt (pokud to končí EOF nebo \n a poté EOF), počet řádků v new_file.txt může být stejné (jako file.txt) po tomto příkazu (k tomu dojde, když není \n) - v každém případě se odstraní obsah posledního řádku.

Nezapomeňte také, že musíte použít druhý (střední) soubor. Pokud kočka a přesměrujete na stejný soubor, vymažete jej.

15
Emanuel Berg

head --lines=-1. Nejprve jsem narazil na tuto možnost na manuálové stránce pro hlavu v systému SLES11SP2 (coreutils-8.12-6.23.1)

tail a head jsou součástí coreutils-rpm (přinejmenším pro systémy založené na rpm).

Podle changelogu coreutils je tato syntaxe podporována, protože coreutils-verze 5.0.1

Špatná zpráva: Podle stránky RH5-man-stránka není tato možnost popsána

Dobrá zpráva: Funguje to s RH5 (takže ve vašem případě: to funguje - alespoň s aktuální verzí RH5).

rpm -q coreutils ukazuje mě (na CentOS 5.8): coreutils-5.97-34.el5_8.1

Nejsem si jistý, jestli RH5.5. již má verzi coreutils, která ji podporuje. Ale 5.5 EoLed stejně.

6
Nils

Linux

$ je poslední řádek, d pro smazání:

sed '$d' ~/path/to/your/file/name

Operační Systém Mac

Ekvivalent sed -i

sed -i '' -e '$ d' ~/path/to/your/file/name
2
jasonleonhard