Portál AbcLinuxu, 25. dubna 2024 11:05


Dotaz: BASH skript - pridanie údajov na začiatok súbora

17.2.2010 19:10 lukas
BASH skript - pridanie údajov na začiatok súbora
Přečteno: 427×
Odpovědět | Admin
Ahoj, uz dlho rozmyslam ako sa da spravit pridavanie riadkov do subora ale v opacnom oradi ako robi echo:

echo riadok > subor.txt

,ale ten pridava riadky takto:

riadok 1 
riadok 2
riadok 3

Chcem to vsak takto:

riadok 3 
riadok 2
riadok 1
Dakujem za napady.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

17.2.2010 19:52 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
Odpovědět | | Sbalit | Link | Blokovat | Admin

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".

Marián Kyral avatar 17.2.2010 19:53 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
Odpovědět | | Sbalit | Link | Blokovat | Admin
Koukni na tac:
$ (echo "radek 1"; echo "radek 2"; echo "radek 3"; ) |tac
radek 3
radek 2
radek 1
$ 
17.2.2010 20:00 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
Odpovědět | | Sbalit | Link | Blokovat | Admin
echo "radek 1" > tmpfile.tmp
cat mainfile >> tmpfile.tmp
Akorát vznikne další soubor o větší velikosti než mainfile (je to podobný jako tac imho).
Intel meltdown a = arr[x[0]&1]; karma | 帮帮我,我被锁在中国房
17.2.2010 20:05 lukas
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
Pekne vam dakujem o tac som nevedel. Opat som o nieco mudrejsi :-)
17.2.2010 22:57 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebo si můžete na pomoc zavolat nějaká šikovný textový editor. 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 touchnout.

Nebo "in-place" sed:
$ echo riadok | while read line ; do sed -ie "1i$line" subor.txt  ; done
Oboje 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.
http://prirucka.ujc.cas.cz/?ref=785&id=790.
18.2.2010 07:17 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
sed -ie
To -ie je pěkná sviňárna, koukněte se pořádně co to v GNU sedu dělá. :/
In Ada the typical infinite loop would normally be terminated by detonation.
18.2.2010 19:45 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
SED(1)
...
       -i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if extension supplied)
...
Uáááá - nerozumím otázce, nechápu souvislosti.
18.2.2010 20:02 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
$ echo bla > soubor.txt
$ ls
soubor.txt
$ sed -ie "1i lalala" soubor.txt
$ ls
soubor.txt  soubor.txte
už je to vidět? :)
In Ada the typical infinite loop would normally be terminated by detonation.
18.2.2010 21:55 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: BASH skript - pridanie údajov na začiatok súbora
A, jistě.... -i -e, vždyť to z toho plyne. Dik. GNU sed obvykle k užití nemám, tak to stejně řeším edem (výborný editor s nádherně úsporným UI a neukecanými chybovými hláškami: ?). ;)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.