Portál AbcLinuxu, 26. dubna 2024 23:25


Dotaz: Jak rozdělit řetězec před a za první tečkou v BASH

13.3.2018 10:27 dnes
Jak rozdělit řetězec před a za první tečkou v BASH
Přečteno: 360×
Odpovědět | Admin
Dobrý den, netuším jak rozdělit v bash skriptu řetězec na dvě části, kdy před i za první tečkou může být libovolný počet znaků.
část 1 === před první tečkou (mimo tečku)
část 2 === za první tečkou   (mimo tečku)

příklad
VAR="214.je.cislo"     # část 1 = 214 , část 2 = je.cislo
VAR="34.je.taky.cislo" # část 1 = 34  , část 2 = je.taky.cislo
Poradíte mi někdo? Děkuji

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (xxl)
13.3.2018 10:53 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: Jak rozdělit řetězec před a za první tečkou v BASH
Odpovědět | | Sbalit | Link | Blokovat | Admin
$ VAR="214.je.cislo" 
$ CAST1=`echo $VAR | cut -d . -f1`
$ CAST2=`echo $VAR | cut -d . -f2-`
$ echo $CAST1
214
$ echo $CAST2
je.cislo
Řešení 1× (Michal Kubeček)
13.3.2018 13:32 MM
Rozbalit Rozbalit vše Re: Jak rozdělit řetězec před a za první tečkou v BASH
Odpovědět | | Sbalit | Link | Blokovat | Admin

A nebo interně rychleji jen:

>VAR="214.je.cislo"
>echo ${VAR%%\.*}
214
>echo ${VAR#*\.}
je.cislo
13.3.2018 16:27 dnes
Rozbalit Rozbalit vše Re: Jak rozdělit řetězec před a za první tečkou v BASH
@MM díky a jde prosím tě testovat proměnnou na existenci tečky? Nemůžu to nikde najít.

13.3.2018 16:58 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Jak rozdělit řetězec před a za první tečkou v BASH
[[ $var == *.* ]]
If you hold a Unix shell up to your ear, you can you hear the C.
13.3.2018 20:06 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak rozdělit řetězec před a za první tečkou v BASH

Tenhle trik se občas hodí i pro jiné účely, např. test, zda proměnná začíná nebo končí určitým vzorkem:

  if [ "${var#*.}" != "$var" ]; then ...
  if [ "${var%.*}" != "$var" ]; then ...

Využívá se toho, že expanze s odříznutím začátku nebo konce zachová původní řetězec, pokud se nenajde žádný odpovídající začátek/konec.

13.3.2018 17:00 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Jak rozdělit řetězec před a za první tečkou v BASH
Tie backslashitka su tam zbytocne. Variable expansion ide podla shell-patterns nie podla regexpov.
If you hold a Unix shell up to your ear, you can you hear the C.
14.3.2018 07:08 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak rozdělit řetězec před a za první tečkou v BASH
Odpovědět | | Sbalit | Link | Blokovat | Admin

Protože (podle mě) nejlepší řešení se substitucemi už tu bylo zmíněné několikrát (#, %, ##, %% oddělí {nejkratší,nejdelší}' '{prefix,suffix}, (definovaný jako glob nebo extglob)), vybliju sem teď ještě jedno naschvál hnusné (leč ilustrativní a k dobrodružné četbě manuálové stránky vybízející) řešení:

VAR='bla.ble.BLA.BLE'
IFS=. read -a TOKENS <<<"$VAR"
echo "${TOKENS[0]}"
(IFS=.; echo "${TOKENS[*]:1}";)

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.