Portál AbcLinuxu, 11. května 2025 06:36

Dotaz: bash - vyhledání výrazu v řetězci

29.10.2013 12:02 Gencast
bash - vyhledání výrazu v řetězci
Přečteno: 469×
Odpovědět | Admin
Ahoj, potřeboval bych poradit jak z řetězci vyhledat výraz např. seconds a přečíst hodnotu před tímto výrazem. Příkaz AWK , protože se řetězec může mít proměnlivou délku. Díky


Ř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

29.10.2013 16:14 NN
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sed, protoze I dont care:
'This homework took 300 seconds, not less.' | sed 's/^\(.*\)\(seconds.*\)/\1/'
29.10.2013 16:51 Chulda
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
jenže pokud to řetězec neobsahuje, tak jej vypíše
echo 'This homework took 300 secondxs, not less.' | sed 's/^\(.*\)\(seconds.*\)/\1/'
This homework took 300 secondxs, not less.
takže správně je to takto:
echo 'This homework took 300 seconds, not less.' | sed -n 's/^\(.*\)\(seconds.*\)/\1/p'
This homework took 300 
echo 'This homework took 300 secondxs, not less.' | sed -n 's/^\(.*\)\(seconds.*\)/\1/p'
29.10.2013 17:11 ss
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Este lepsie by malo byt

echo -e 'Begin\nThis homework took 300 seconds, not less.\nEnd' | sed -n '/seconds/{s/^\(.*\)\(seconds.*\)/\1/p;q};p'
29.10.2013 17:16 Kit
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Mně vychází spíš tato šílenost:
sed -n 's/^.*[^0-9]\([0-9]\+\)\s*seconds.*$/\1/p'
Předpokládám, že výsledkem má být jen to číslo.
29.10.2013 20:17 gencas
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Ano, výsledkem mělo být jen číslo , které pak nacpu do někalé proměné.

Díky za pomoc , skvěle to funguje !
Řešení 1× (Ash)
29.10.2013 16:35 jef
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
treba takto:

a="111 seconds"
[[ "$a" =~ ([0-9]+)[[:blank:]]*seconds ]]
echo ${BASH_REMATCH[1]}
29.10.2013 20:18 gencas
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Díky za pomoc, toto taky skvěle funguje.
29.10.2013 17:46 loki
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Osobne nejsem prilis velkym priznivcem sedu, ale naopak jsem priznivcem awk. Zde je jednoduchy skript, ktery snad dela to, co chcete:
#!/bin/bash

echo -ne "raz dva 30 seconds\ntri ctyri osm padesat\nx y z 54 seconds\n" | \
awk '{for(i = 2; i <= NF; i++) if ($(i) == "seconds") print $(i-1);}'
29.10.2013 20:20 gencas
Rozbalit Rozbalit vše Re: bash - vyhledání výrazu v řetězci
Díky , že to půjde udělat s AWK jsem ani netušil. Skvělé.

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.