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 tail
combined s wc
. Máte nějaké rychlé zvraty?
v sed $
je poslední řádek, takže poslední řádek smažete:
sed '$d' <file>
$ za poslední řádek:
sed '$d' file
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.
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ě.
sed '$d' ~/path/to/your/file/name
sed -i '' -e '$ d' ~/path/to/your/file/name