Portál AbcLinuxu, 12. května 2025 09:05
$cat test.index ./test.1 ./test.2 ./test.3 ./test.4mam riesenie asi taketo
tail -n 2 test.index | head -n 1
tail -n 2 test.index | head -n 1 | cut -c3-
ale myslim ze bude existovat aj jednoduchsie riesenie
sed
:
$ cat test.index | sed -n 's|^./||;${g;1!p;};h' test.3Ale nechtěj po mně vysvětlení, nebo zjednodušení ..
s|^./||
Každému řadku se uřeže vše po poslední lomítko.
${g;1!p;}
Pouze s posledním řádkem se provede toto: Z hold space překopírujeme data do pattern space [g
] (tj. řádek předcházející tento řádek, tj. řádek předposlední) a pokud se nejedná o 1. řádek (čeho?) [1!
], tak jej vytiskneme [p
].
h
Každý řádek překopírujeme z pattern space do hold space.
Já si zahraji na vykladače:s|^./||
Samozřjmě jen tečka a lomítko na začátku (vsugeroval jsem si tam hvězdičku).
sed -n 's|^./||;${g;p};h'ale toto:
sed -n 's|^./||;${g;1!p;};h'se zdá být univerzálnější, protože i pouze při jednořádkovém vstupu to správně nevytiskne nic, kdežto předchozí varianta vyhodí (nesprávně) prázdný řádek. PS: Já to nevymýšlel, pouze jsem použil a upravil zde jeden příklad (tato stránka se vždy hodí ...).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.