de-vraag
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
Berek Bryan
Berek Bryan
Question

Výpis podreťazca v jazyku Bash

Pri názve súboru v tvare someletters_12345_moreleters.ext chcem extrahovať 5 číslic a vložiť ich do premennej.

Aby som to zdôraznil, mám názov súboru s x znakmi, potom postupnosť piatich číslic obklopenú jedným podčiarkovníkom na oboch stranách a potom ďalšiu sadu x znakov. Chcem zobrať päťmiestne číslo a vložiť ho do premennej.

Veľmi ma zaujíma, koľkými rôznymi spôsobmi sa to dá dosiahnuť.

680 2009-01-09T13:53:22+00:00 3
 codeforester
codeforester
Edited question 9 október 2017 в 4:03
Programovanie
string
shell
bash
substring
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
 FerranB
FerranB
9 január 2009 в 1:56
2009-01-09T13:56:14+00:00
Viac na
Zdroj
Upraviť
#8735100

Použite cut:

echo 'someletters_12345_moreleters.ext' | cut -d'_' -f 2

Všeobecnejšie:

INPUT='someletters_12345_moreleters.ext'
SUBSTRING=$(echo $INPUT| cut -d'_' -f 2)
echo $SUBSTRING
Victor Yarema
Victor Yarema
Edited answer 4 november 2015 в 10:51
648
0
Johannes  Schaub - litb
Johannes Schaub - litb
9 január 2009 в 2:00
2009-01-09T14:00:08+00:00
Viac na
Zdroj
Upraviť
#8735101

Všeobecné riešenie, kde číslo môže byť kdekoľvek v názve súboru, s použitím prvej z takýchto sekvencií:

number=$(echo $filename | egrep -o '[[:digit:]]{5}' | head -n1)

Ďalšie riešenie na získanie presnej časti premennej:

number=${filename:offset:length}

Ak má názov vášho súboru vždy formát stuff_digits_..., môžete použiť awk:

number=$(echo $filename | awk -F _ '{ print $2 }')

Ešte jedno riešenie na odstránenie všetkého okrem číslic, použite

number=$(echo $filename | tr -cd '[[:digit:]]')
Johannes  Schaub - litb
Johannes Schaub - litb
Edited answer 9 január 2009 в 2:25
91
0
 jor
jor
9 január 2009 в 3:01
2009-01-09T15:01:02+00:00
Viac na
Zdroj
Upraviť
#8735102

K dispozícii je aj vstavaný príkaz bash 'expr':

INPUT="someletters_12345_moreleters.ext"  
SUBSTRING=`expr match "$INPUT" '.*_\([[:digit:]]*\)_.*' `  
echo $SUBSTRING
 jor
jor
Edited answer 9 január 2009 в 4:05
1
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Jasur Fozilov
Registered pred 9 hodinami
2
Zuxriddin Muydinov
Registered pred dňom
3
Денис Анненский
Registered pred 3 dňami
4
365
Registered pred týždňom
5
True Image
Registered pred týždňom
DA
DE
EL
ES
FR
ID
IT
JA
KO
NL
PL
PT
SK
TR
ZH
© de-vraag 2022
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora