Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Miloš 21. 09. 2011, 11:04:55
-
Jak nejlépe získat z řádky (bude nalezena přes grep), řetězec následující po /texty/:
příklady:
blablabla /texty/finance blablabla
blabla /texty/ano blablabla
blablablabla /texty/jo blabla
blablabla /texty/asi ... tento pripad (po retezci je uz konec) asi nastane
bla /texty/dnes blabla
po tom řetězci, který mne zajímá, by měla být vždy mezera, ale také už může být konec celého textu
-
zapomnel jsem - jestli mi nekdo poradi - tak pokud mozno pomoci nejjednodussich prikazu . muj shell je dost primitivni
-
| awk -F "/" '{print $1}'|awk '{print $1}
... nebo tak nejak ;) Ale neni to v "shellu" 8)
-
| awk -F "/" '{print $1}'|awk '{print $1}
... nebo tak nejak ;) Ale neni to v "shellu" 8)
| sed -e 's/.*texty\(.*\)/\1'
-
| sed -e 's/.*texty\/\(.*\)/\1/'
-
Jak nejlépe získat z řádky (bude nalezena přes grep), řetězec následující po /texty/:
příklady:
blablabla /texty/finance blablabla
blabla /texty/ano blablabla
blablablabla /texty/jo blabla
blablabla /texty/asi ... tento pripad (po retezci je uz konec) asi nastane
bla /texty/dnes blabla
po tom řetězci, který mne zajímá, by měla být vždy mezera, ale také už může být konec celého textu
while read line ; do line=${line##*/}; line=${line%% *}; echo "vysledek: $line" ; done < vstupni_soubor
-
| sed -e 's/.*texty\/\(.*\)/\1/'
dik, tohle najde ten retezec, ale jeste to zachova vse za nim. Da se to nejak lidsky pochopit, co je v tom prikazu vubec napsano ? :-)
-
Jak nejlépe získat z řádky (bude nalezena přes grep), řetězec následující po /texty/:
příklady:
blablabla /texty/finance blablabla
blabla /texty/ano blablabla
blablablabla /texty/jo blabla
blablabla /texty/asi ... tento pripad (po retezci je uz konec) asi nastane
bla /texty/dnes blabla
po tom řetězci, který mne zajímá, by měla být vždy mezera, ale také už může být konec celého textu
while read line ; do line=${line##*/}; line=${line%% *}; echo "vysledek: $line" ; done < vstupni_soubor
dik, tohle byl priklad, nepotrebuju cist vsechny radky ze souboru. Ja najdu pomoci grep prislusny zapis a potrebuji ziskat jen to jedno slovo
-
while read line ; do line=${line##*/}; line=${line%% *}; echo "vysledek: $line" ; done < vstupni_soubor
dik, tohle byl priklad, nepotrebuju cist vsechny radky ze souboru. Ja najdu pomoci grep prislusny zapis a potrebuji ziskat jen to jedno slovo
tak si vstup prozen grepem pred while a mas to ne?
-
while read line ; do line=${line##*/}; line=${line%% *}; echo "vysledek: $line" ; done < vstupni_soubor
dik, tohle byl priklad, nepotrebuju cist vsechny radky ze souboru. Ja najdu pomoci grep prislusny zapis a potrebuji ziskat jen to jedno slovo
tak si vstup prozen grepem pred while a mas to ne?
ale v tom textu blablablabla muze klidne byt: /text1/text2 a tohle najde prave to prvni
-
sed -n '/^.*\/texty\//{s///;s/ .*$//;p}'
alebo
sed -nr '/\/texty\//{s_^.*/texty/([^ ]+).*$_\1_;p}'
-
sed -n '/^.*\/texty\//{s///;s/ .*$//;p}'
alebo
sed -nr '/\/texty\//{s_^.*/texty/([^ ]+).*$_\1_;p}'
dik moc, hned to prvni funguje. Akorat mi to nic nerika :-)
-
sed -n '/^.*\/texty\//{s///;s/ .*$//;p}'
alebo
sed -nr '/\/texty\//{s_^.*/texty/([^ ]+).*$_\1_;p}'
dik moc, hned to prvni funguje. Akorat mi to nic nerika :-)
tak to je fakt soda :-)
já mám:
| sed -e 's/.*texty\/\(\w*\)\b.*/\1/'
to je možná srozumitelnější
matchuj cokoliv až po texty/, zapamatuj si slovo jako 1, matchuj hranici slova, matchuj cokoliv
vytiskni 1
-
to je možná srozumitelnější
matchuj cokoliv až po texty/, zapamatuj si slovo jako 1, matchuj hranici slova, matchuj cokoliv
vytiskni 1
Zavisi od toho co tam moze byt ... slovo len z pismen a cisel (vase riesenie s \w, dokonca akceptuje aj prazdne slovo), alebo cokolvek okrem medzery (moje riesenia).
Moje riesenie navyse nevypise nic, ak riadok neobsahuje /texty/
-
to je možná srozumitelnější
matchuj cokoliv až po texty/, zapamatuj si slovo jako 1, matchuj hranici slova, matchuj cokoliv
vytiskni 1
Zavisi od toho co tam moze byt ... slovo len z pismen a cisel (vase riesenie s \w, dokonca akceptuje aj prazdne slovo), alebo cokolvek okrem medzery (moje riesenia).
Moje riesenie navyse nevypise nic, ak riadok neobsahuje /texty/
tak to by mělo být ošetřeno už tím grepem (nebo naopak může ten grep úplně nahradit).
Ale jinak hluboce smekám, takové použití jsem ještě v životě neviděl.
-
| sed -e 's/.*texty\/\(\w*\)\b.*/\1/'
to je možná srozumitelnější
matchuj cokoliv až po texty/, zapamatuj si slovo jako 1, matchuj hranici slova, matchuj cokoliv
vytiskni 1
perlova syntaxe v sedu neni prenositelna, ne kazdy sed je GNU sed.
$ echo '/text/text /texty/finance /text/text' | sed 's/^.*\/texty\/\([^ ]*\).*$/\1/'
finance
$ echo '/text/text /texty/finance /text/text' | perl -pe 's#^.*/texty/(\S+).*$#$1#;'
finance