Portál AbcLinuxu, 10. května 2025 05:27
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ěď
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
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ší?
sed -n 's/^[ \t]*#define REVISION_NR "\([^"]*\)".*/\1/p' <revision_nr.h
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?
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'
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.