Portál AbcLinuxu, 10. května 2025 05:27

Dotaz: BASH - vytažení slova z textu

21.2.2009 13:32 f1lo | skóre: 16
BASH - vytažení slova z textu
Přečteno: 481×
Odpovědět | Admin

Zdravim, potřebuji poradit s vytažením určitého čísla ze souboru pomocí bashe.

soubor se nazývá:

revision_nr.h

výše zmiňovaný soubor vypadá takto:

#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
 #define REVISION_NR "7296"
#endif // __REVISION_NR_H__

a já z tohoto souboru potřebuji vytáhnout to tučně vyznařené číslo a uložit ho do proměnné. Tipuju si, že by se to mělo grepnout a poté nějako rozparsovat, jenže nevím jak :-). Díky předem za odpověď

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

Odpovědi

21.2.2009 13:57 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Sice mi není moc jasné, proč trváte na použití bashe, když existují vhodnější nástroje (např. sed), ale budiž…

#!/bin/bash

while read w1 w2 w3; do
  echo "$w1" "$w2" "$w3"
  if [ "$w1" = '#define' -a "$w2" = REVISION_NR ]; then
    revnr="${w3#*\"}"
    revnr="${revnr%%\"*}"
  fi
done <revision_nr.h

echo $revnr
21.2.2009 14:25 f1lo | skóre: 16
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu

Netrval jsem na použití bashe, ale nevěděl jsem o žádné jiné možnosti :-).

Kouknul jsem na pár stránek o sedu, ale moc moudrý z toho nejsem. Pomocí sedu by to bylo kratší i rychlejší?

21.2.2009 14:50 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu
+- nějak takhle:
sed -n 's/^[ \t]*#define REVISION_NR "\([^"]*\)".*/\1/p' <revision_nr.h
I am always ready to learn although I do not always like to be taught. (W. Churchill)
21.2.2009 14:59 f1lo | skóre: 16
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu

Děkuji Vám moc, funguje to naprosto skvěle.

21.2.2009 16:09 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu
To bylo jen takové drobné rýpnutí, protože se tu rozmáhá nešvar psát "v bashi" a myslet tím "shellovým skriptem za použití nástrojů jako grep, cut, sed, awk, ...".
22.2.2009 22:56 Maertien
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Doporucuji pouzit awk.
26.3.2009 11:50 jirka012
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu

mam takovyto vystup

open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26050, ...}) = 0
mmap(NULL, 26050, PROT_READ, MAP_SHARED, 3, 0) = 0x7f5cd2c69000
close(3)                                = 0
 

a potrebuji dostat jen ten radek, ktery zacina slovem open a z neho potrebuji jen cast mezi uvozovkami.

jak na to?

26.3.2009 12:31 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: BASH - vytažení slova z textu
Člověče, proč otvíráte starou diskuzi novým dotazem?
a potrebuji dostat jen ten radek ktery zacina slovem open a z neho potrebuji jen cast mezi uvozovkami.

Ta nápověda nahoře by vám nestačila? :-)

sed -n 's/.*open"\([^"]*\)".*/\1/p'
I am always ready to learn although I do not always like to be taught. (W. Churchill)

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.