Portál AbcLinuxu, 26. dubna 2024 21:34


Dotaz: Bash: Vyjmutí části slova až k určitému výrazu

David Watzke avatar 12.12.2005 15:19 David Watzke | skóre: 74 | blog: Blog... | Praha
Bash: Vyjmutí části slova až k určitému výrazu
Přečteno: 323×
Odpovědět | Admin
Ahoj. Pro svůj skript potřebuju ze slova vyjmout jen to, co je před 2 a za 2. Třeba z abc2def do jedný proměnný abc a do druhý def. Předpokládám, že mi s tím pomůže awk, ale opravdu ho nemůžu (ani s pomocí manuálu) pochopit.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.12.2005 15:23 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
nestačí ti cut?
[15:22:40]-[~]-
[tsunami@vodik]$ cut -d2 -f 2 <<< neco2nekam
nekam

[15:22:42]-[~]-
[tsunami@vodik]$ cut -d2 -f 1 <<< neco2nekam
neco
-- Nezdar není hanbou, hanbou je strach z pokusu.
David Watzke avatar 12.12.2005 15:26 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Jo, ten rozhodně postačí. Netušil jsem, že umí i tohle. :-) Díky.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
12.12.2005 17:12 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Ještě elegantnější, alébržto nevolá žádné subprocesy, je vystačit si s prostředky shellu (sh or bash).
what=neco2nekam
prefix=${what%2*}
sufix=${what#*2}
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
12.12.2005 17:15 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Jestli tuším k čemu to má sloužit, potom
from=${0%2*}
to=${0#*2}
:-D
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
12.12.2005 17:26 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
s tím sh bych si nebyl tak jistý (solaris 10):
# what=neco2nekam
# prefix=${what%2*}
bad substitution
-- Nezdar není hanbou, hanbou je strach z pokusu.
12.12.2005 19:03 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
$ exec /usr/xpg4/bin/sh
$ what=neco2nekam
$ prefix=${what%2*}
$ echo $prefix
neco
$ 
;-) Ale /bin/sh to neumí :-(
12.12.2005 19:10 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
můj zas jo, To je fakt hokej. :-(
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
12.12.2005 17:19 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Jedno drobné upozornění <<< je specialita bash a sh to nezná. Přitom zápis
echo -n cosik | some
je ekvivalentní a přitom přenositelný. echo je interní příkaz a žádný fork() to neudělá.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
David Watzke avatar 12.12.2005 19:35 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Napsal jsem to tedy radši takhle, nerad bych, aby to někde dělalo trable.
mp32flac|mpc2flac|ogg2flac|wma2flac) # a mnoho dalších formátů :)
 $(echo $1 | cut -d2 -f1)2wav
 wav2$(echo $1 | cut -d2 -f2)
;;

wav2flac|wav2ogg|wav2mp3|wav2mpc)
 wav2$(echo $1 | cut -d2 -f2)
;;

mp32wav|mpc2wav|ogg2wav|wma2wav)
 $(echo $1 | cut -d2 -f1)2wav
;;
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 12.12.2005 18:23 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dobře, tohle bych měl. Ještě mě trápí jedna věc. Jak narvat jedný funkci v case víc výrazů pomocí kterých se spustí? (Pardon za neprávně použité termíny, radši to objasním příkladem.)
{ogg2wav,wav2ogg}) # (vím, že je to nesmysl, proto se ptám jak to udělat)
 $(cut -d2 -f1 <<< $1)2wav
 wav2$(cut -d2 -f2 <<< $1)
;;
namísto
ogg2wav)
 $(cut -d2 -f1 <<< $1)2wav
 wav2$(cut -d2 -f2 <<< $1)
;;

wav2ogg)
 $(cut -d2 -f1 <<< $1)2wav
 wav2$(cut -d2 -f2 <<< $1)
;;
Prostě abych to nemusel rozepisovat a mohl narvat hafo výrazů k jedný funkci. :-) Použil bych *), ale to musí mít nápověda.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 12.12.2005 18:47 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Částečně vyřešeno, ale stále bych rád znal odpověď. Udělal jsem to takhle:
???*2???*) # aby bral jen s dvojkou uprostřed
           # a kolem min. 3 znaky z obou stran

*)
# nápověda
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
12.12.2005 18:52 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
$ help case
case: case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac
    Selectively execute COMMANDS based upon WORD matching PATTERN.  The
    `|' is used to separate multiple patterns.
    ^^^
David Watzke avatar 12.12.2005 18:58 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash: Vyjmutí části slova až k určitému výrazu
Díky moc.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.