Portál AbcLinuxu, 25. dubna 2024 11:05
echo riadok > subor.txt
,ale ten pridava riadky takto:
riadok 1 riadok 2 riadok 3
Chcem to vsak takto:
riadok 3 riadok 2 riadok 1Dakujem za napady.
Z principu to není možné bez posunu veškerého obsahu souboru, což může být pro velký soubor relativně drahá operace. Takže v první řadě je na místě rozmyslet si, jestli je potřeba skutečně vkládat na začátek, anebo jestli stačí jen vypsat nakonec celý soubor pozpátku (což zajistí třeba příkaz tac
).
Vkládání na začátek pak umí zajistit třeba nějaký "příkazový" editor, např. sed: sed -i '1itext' soubor
, což vloží řádek "text" na začátek souboru "soubor".
$ (echo "radek 1"; echo "radek 2"; echo "radek 3"; ) |tac radek 3 radek 2 radek 1 $
echo "radek 1" > tmpfile.tmp cat mainfile >> tmpfile.tmpAkorát vznikne další soubor o větší velikosti než mainfile (je to podobný jako tac imho).
ed
itor. Např. (vč promptu):
$ echo riadok | while read line ; do ed <<EOT subor.txt >/dev/null 2>&1 ; done > 1 > i > $line > . > w > q > EOT(subor.txt musí existovat. Můžete ho napřed pro jistotu
touch
nout.
Nebo "in-place" sed
:
$ echo riadok | while read line ; do sed -ie "1i$line" subor.txt ; doneOboje lépe asi zabalit do funkce (vč. ošetření (ne)existence souboru. Čte to na vstupu do roury a přidává právě načtený řádek na začátek
subor.txt
.
sed -ieTo -ie je pěkná sviňárna, koukněte se pořádně co to v GNU sedu dělá. :/
SED(1) ... -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied) ...Uáááá - nerozumím otázce, nechápu souvislosti.
$ echo bla > soubor.txt $ ls soubor.txt $ sed -ie "1i lalala" soubor.txt $ ls soubor.txt soubor.txteuž je to vidět? :)
-i -e
, vždyť to z toho plyne. Dik. GNU sed
obvykle k užití nemám, tak to stejně řeším ed
em (výborný editor s nádherně úsporným UI a neukecanými chybovými hláškami: ?
). ;)
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.