Portál AbcLinuxu, 7. listopadu 2025 13:00
$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.3
Ale 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.