Vyhledání řetězce v shell scriptu

Miloš

Vyhledání řetězce v shell scriptu
« kdy: 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


Miloš

Re: Vyhledání řetězce v shell scriptu
« Odpověď #1 kdy: 21. 09. 2011, 11:13:21 »
zapomnel jsem - jestli mi nekdo poradi - tak pokud mozno pomoci nejjednodussich prikazu . muj shell je dost primitivni

and

Re: Vyhledání řetězce v shell scriptu
« Odpověď #2 kdy: 21. 09. 2011, 11:18:10 »
| awk -F "/" '{print $1}'|awk '{print $1}

... nebo tak nejak ;) Ale neni to v "shellu"  8)

DgBd

  • ****
  • 283
    • Zobrazit profil
    • E-mail
Re: Vyhledání řetězce v shell scriptu
« Odpověď #3 kdy: 21. 09. 2011, 11:26:04 »
| awk -F "/" '{print $1}'|awk '{print $1}

... nebo tak nejak ;) Ale neni to v "shellu"  8)

| sed -e 's/.*texty\(.*\)/\1'

DgBd

  • ****
  • 283
    • Zobrazit profil
    • E-mail
Re: Vyhledání řetězce v shell scriptu
« Odpověď #4 kdy: 21. 09. 2011, 11:28:11 »
| sed -e 's/.*texty\/\(.*\)/\1/'


pepazdepa

Re: Vyhledání řetězce v shell scriptu
« Odpověď #5 kdy: 21. 09. 2011, 11:31:31 »
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


Miloš

Re: Vyhledání řetězce v shell scriptu
« Odpověď #6 kdy: 21. 09. 2011, 11:32:47 »
| 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 ? :-)

Miloš

Re: Vyhledání řetězce v shell scriptu
« Odpověď #7 kdy: 21. 09. 2011, 11:35:39 »
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

pepazdepa

Re: Vyhledání řetězce v shell scriptu
« Odpověď #8 kdy: 21. 09. 2011, 11:40:50 »
Citace

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?

Miloš

Re: Vyhledání řetězce v shell scriptu
« Odpověď #9 kdy: 21. 09. 2011, 11:50:07 »
Citace

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

deadmail

Re: Vyhledání řetězce v shell scriptu
« Odpověď #10 kdy: 21. 09. 2011, 11:54:12 »
Kód: [Vybrat]
sed -n '/^.*\/texty\//{s///;s/ .*$//;p}'alebo
Kód: [Vybrat]
sed -nr '/\/texty\//{s_^.*/texty/([^ ]+).*$_\1_;p}'

Miloš

Re: Vyhledání řetězce v shell scriptu
« Odpověď #11 kdy: 21. 09. 2011, 11:59:10 »
Kód: [Vybrat]
sed -n '/^.*\/texty\//{s///;s/ .*$//;p}'alebo
Kód: [Vybrat]
sed -nr '/\/texty\//{s_^.*/texty/([^ ]+).*$_\1_;p}'

dik moc, hned to prvni funguje. Akorat mi to nic nerika :-)

DgBd

  • ****
  • 283
    • Zobrazit profil
    • E-mail
Re: Vyhledání řetězce v shell scriptu
« Odpověď #12 kdy: 21. 09. 2011, 12:08:09 »
Kód: [Vybrat]
sed -n '/^.*\/texty\//{s///;s/ .*$//;p}'alebo
Kód: [Vybrat]
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

deadmail

Re: Vyhledání řetězce v shell scriptu
« Odpověď #13 kdy: 21. 09. 2011, 12:13:43 »
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/

DgBd

  • ****
  • 283
    • Zobrazit profil
    • E-mail
Re: Vyhledání řetězce v shell scriptu
« Odpověď #14 kdy: 21. 09. 2011, 12:16:46 »
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.