Portál AbcLinuxu, 12. května 2025 02:50
MUJ TEXT|toto vložil tar|MUJ DRUHY TEXT MUJ TEXT|toto vložil tar|MUJ DRUHY TEXT MUJ TEXT|toto vložil tar|MUJ DRUHY TEXT MUJ TEXT|toto vložil tar|MUJ DRUHY TEXT MUJ TEXT|toto vložil tar|MUJ DRUHY TEXTMoc děkuji za pomoc
tar -tf archive.tar | sed 's/.*/MUJ TEXT|\0|MUJ DRUHY TEXT/'
výsledek by pak měl vypadat finalně takto.. MUJ TEXT|MUJ DRUHY TEXT+toto vložil tar|toto vložil tar MUJ TEXT|MUJ DRUHY TEXT+toto vložil tar|toto vložil tar MUJ TEXT|MUJ DRUHY TEXT+toto vložil tar|toto vložil tar
tar -tf `pwd`/$ITEM | sed "s/.*/Extrahuji|tar -tf $ITEM \/\0|\/\0/" >> $DATA_FILEa tento už hází chybu (doplněno o tučný text)
tar -tf `pwd`/$ITEM | sed "s/.*/Extrahuji|tar -tf `pwd`/$ITEM \/\0|\/\0/" >> $DATA_FILE
sed: -e expression #1, char 26: unknown option to `s'co se mu nelíbí? díky
tar -tf `pwd`/$ITEM | sed "s/.*/Extrahuji|tar -tf `pwd`\/$ITEM \/\0|\/\0/" >> $DATA_FILE tar -tf `pwd`/$ITEM | sed "s/.*/Extrahuji|tar -tf `pwd` $ITEM \/\0|\/\0/" >> $DATA_FILE
tar -tf `pwd`/$ITEM | sed "s/.*/Extrahuji|tar -tf `pwd` $ITEM \/\0|\/\0/" >> $DATA_FILE
A co vyleze z `pwd`? Nejprve se provádí nahrazení, pak až spouštění příkazů. Hodí se občas použít v bashi set -x
, čímž se zapne "debugovací" výpis s postupným prováděním řádky. Anebo prostě jen jednoduché echo "s/.*/Extrahuji|tar -tf `pwd` $ITEM \/\0|\/\0/"
.
echo "s/.*/Extrahuji|tar -tf `pwd` $ITEM \/\0|\/\0/".mi vypíše tohle
s/.*/Extrahuji|tar -tf /tmp/backup/http/ zaloha.tar.gz \/\0|\/\0/.
No v bashi se dá k nahrazení použít úděsná konstrukce ${PWD//\//\\/}
, ale v tomhle případě bych se raději podobným ascii-art výtvorům vyhnul a zvolil si nějaký vhodnější znak coby oddělovač pro sed, třeba dvojtečku: sed "s:.*:...$PWD...:"
(proměnná $PWD obsahuje aktuální adresář, tady by šlo použít i `pwd`
, ale ascii-artová šílenost nahoře pracuje jen s proměnnou), pokud tedy jde předpokládat, že v cestě nebude dvojtečka.
Anebo na to jít úplně jinak, vzhledem k tomu, že cílem přidat text bez dalších úprav, dá se úplně vyhnout sed-u a použít něco jako:
tar ... | while read; do echo "Extrahuji|tar -tf $PWD/$ITEM/$REPLY|/$REPLY/"; done
(V proměnné $REPLY je načtena vždy jedna řádka z pipe pomocí příkazu read.)
tar -tf `pwd`/$ITEM | sed "s@.*@Extrahuji|tar -tf `pwd` $ITEM /\0|/\0@" >> $DATA_FILEalebo
tar -tf `pwd`/$ITEM | sed "s:.*:Extrahuji|tar -tf `pwd` $ITEM /\0|/\0:" >> $DATA_FILEalebo hocijaky iny oddelovac, ktory sa tam bude vyskytovat len tri krat BTW: tar -t len testuje archiv neextrahuje
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.