Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Cuore 04 Května 2014, 16:26:01
-
Ahoj,
jak odfiltrovat absolutní cestu?
Mám např.
/media/Data/cuore/prográmky/programy
/media/WDmyLive/Software/zalohy/Desktop/compiz.profile
/media/WDmyLive/Software/zalohy/Desktop/fstab_desktop
/media/WDmyLive/Software/zalohy/programy.txt
/home/cuore/Dokumenty/ip.odf
/media/WDmyLive/Software/.Apple
a výsledek by měl vypadat
programy
compiz.profile
fstab_desktop
programy.txt
ip.odf
.Apple
díky ;)
-
echo "/media/Data/cuore/prográmky/programy" | rev | cut -d "/" -f 1 | rev
-
basename
-
basename
Sakra to je chytrý, to jsem neznal :)
-
:)
Nebo třeba oblíbený sed by byl taky jednodušší
sed 's/.*\///'
-
sakra kam na to chodíte :) s tím sedem jsem se mordoval, ale nějak ::)
nicméně pokud budu mít textový dokument s odkazy, tak pomocí while read bych si vyčítal řádky a ten basename je moc krásný. Takhle by to šlo? je to jen nástřel
cnt=0
while read SIN; do
cnt=$[cnt+1]
basename $SIN >> cil.txt
done < $HOME/zdroj.txt
každopádně díky oběma
-
S tím sedem je to jen o pochopení regulárních výrazů:
cesta je dělená lomítky a regulární výrazy jsou žravé -> tudíž .*/ se zastaví až na posledním lomítku na řádku.
Jinak by ti místo while/read stačil ten sed:
sed 's/.*\///' zdroj > výsledek
A pokud bys to opravdu chtěl počítat, tak můžeš nejjednodušeji výsledek prohnat přes
wc -l
A ještě mě napadlo:
grep -Eo '[^/]+$'
;)
-
Pokud budeš mít ten textový soubor se seznamem tak stačí
echo ${line##*/}
pro každý řádek