PDA

View Full Version : "Catturare" parti di testo da consolle


ElMato
17-06-2003, 08:53
Sono alle prime armi e volevo creare un file .sh x riprendendo dei numeri da un programma lanciato precedentemente dalla consolle. Esiste qualche comando da inserire nel file o qlc x riuscire a riprendere quella parte di testo o numero da un programma esterno lanciato precedentemente dalla consolle?

Qualcuno mi può aiutare? :cry:

Ciao by ElMato :cool:

cn73
17-06-2003, 09:04
devi fare uno scriptino bash....mettere tutto in un unico file contenente la sequenza di operazioni da compiere...

lovaz
17-06-2003, 09:06
Sii piu' preciso :confused:
hai un programma che stampa dei numeri nello stdout e li vuoi leggere dal tuo script? Se e' cosi'
programma | tuoscript.sh
e leggi da stdin

kingv
17-06-2003, 09:09
forse ho capito cosa intendi

da shell lancia:


script miofile

e ti crei un file con tutto quello che passa a schermo.
poi lo editi e ti ricavi lo scipt di cui hai bisogno.

ElMato
17-06-2003, 09:13
Lovaz sono alle prime armi con linux e ho capito ben poco di quello che hai scritto cmq lancio il comando list da consolle e con uno script volevo recuperare quello che aveva scritto nella consolle.

Mi potete aiutare?

ajez
17-06-2003, 09:19
scrivi sulla consolle: list | nomescript e l'output di list viene mandato nell'input dello script.. si chiama pipe (all'inglese) :D

cn73
17-06-2003, 09:48
Uno stralcio di uno scriptino che uso io per rimuovere dei file di log....

file="$homeLogs$httpPrinter_file"
files=`ls $file`
for token in $files
do
esito=`tail $token > $token`
if [ "x$esito" = "x" ]
then
echo resettato il file $token
else
echo $esito
fi
done;;

ElMato
17-06-2003, 11:12
Scusate x la mia ignoranza ma è meglio se rispiego quello che voglio ottenere.
Da uno script vorrei riprendere le dimensioni del video lanciato precedentemente da mplayer, queste informazioni nn appaiono nella prima riga (altrimenti avrei risolto utilizzando mplayer video.avi | script.sh) ma dopo un bel pò di righe.
Come posso riprendere queste infomazioni in mezzo alle diverse righe?

________________________________________
mplayer da consolle:

Using GNU internationalization
Original domain: messages
Original dirname: /usr/share/locale
Current domain: mplayer
Current dirname: /usr/local/share/locale


MPlayer 0.90rc5-3.2.2 (C) 2000-2003 Arpad Gereoffy (see DOCS)

CPU: Advanced Micro Devices (Family: 6, Stepping: 0)
Detected cache-line size is 64 bytes
CPUflags: MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 0
Compiled for x86 CPU with extensions: MMX MMX2 3DNow 3DNowEx SSE

Reading config file /usr/local/etc/mplayer/mplayer.conf: No such file or directory
Reading config file /root/.mplayer/config
Reading /root/.mplayer/codecs.conf: can't open '/root/.mplayer/codecs.conf': No such file or directory
Reading /usr/local/etc/mplayer/codecs.conf: 50 audio & 136 video codecs
font: can't open file: /root/.mplayer/font/font.desc
Font /usr/local/share/mplayer/font/font.desc loaded successfully! (206 chars)
Failed to open /dev/rtc: Dispositivo o risorsa occupata (mplayer should be setuid root or /dev/rtc should be readable by the user.)
Using usleep() timing
Can't open input config file /root/.mplayer/input.conf : No such file or directory
Can't open input config file /usr/local/etc/mplayer/input.conf : No such file or directory
Falling back on default (hardcoded) input config
Setting up LIRC support...
mplayer: could not connect to socket
mplayer: Connessione rifiutata
Failed to open LIRC support.
You will not be able to use your remote control.

Playing video.avi
AVI file format detected.
VIDEO: [DIVX] 720x314 24bpp 25,00 fps 1380,0 kbps (168,5 kbyte/s)
_______________________________________________________________

Quello evidenziato è quello che mi interessa ripredere nello script. :rolleyes: [/b]

cn73
17-06-2003, 11:23
Metti l'ultima riga in una variabile con tail -1 e poi se il formato di quella riga è sempre uguale usi le funzioni per estrarre le sottostringhe.

lovaz
17-06-2003, 11:31
basta che fai
mplayer pippo.avi | grep VIDEO:
e ottieni la riga in questione (visto che non dovrebbe essere l'ultima)

cn73
17-06-2003, 11:45
Hai ragione... A sto punto fai un | grep 'VIDEO: [DIVX] ' e vai sul sicuro...

ElMato
17-06-2003, 12:15
Ok grazie x i suggerimenti fino a qui ci sono arrivato:
VIDEO: [DIVX] 720x314 24bpp 25,00 fps 1380,0 kbps (168,5 kbyte/s)

Adesso che comandi devo usare x estrarre solo '720X314' ?
Un'altra cosa se ho 10 righe che cominciano con le stesse parole e varia soltanto un valore alla fine com faccio a catturare il valore della 5a riga?

Grazie x il Vostro Aiuto.

PS: Come si fa il trattino orizzontale (che combinazione di tasti) ?

Ciao by ElMato :rolleyes:

lovaz
17-06-2003, 12:53
Originally posted by "ElMato"

... Adesso che comandi devo usare x estrarre solo '720X314' ?
Con la bash non saprei, si puo' fare facilmente con tcl, probabilmente anche con sed/awk
Un'altra cosa se ho 10 righe che cominciano con le stesse parole e varia soltanto un valore alla fine com faccio a catturare il valore della 5a riga?
Io userei tcl
PS: Come si fa il trattino orizzontale (che combinazione di tasti) ?

Ciao by ElMato :rolleyes:
Intendi il meno? con il tasto apposito, anche sul tastierino.

lovaz
17-06-2003, 13:05
Originally posted by "ElMato"

... Un'altra cosa se ho 10 righe che cominciano con le stesse parole e varia soltanto un valore alla fine com faccio a catturare il valore della 5a riga?...
Mi e' venuto in mente:
... | head -5 | tail -1
dovrebbe andare (anche se non l'ho provato :D )

cn73
17-06-2003, 13:23
quelloCheTiServe=`echo $linea |cut -cm-n`

dove m è l'indice iniziale e n quello finale e linea è la riga di testo che hai estratto...

lovaz
17-06-2003, 13:36
Non e' meglio cosi'?
... | cut -d \ -f 3

ti estrae il terzo campo, indipendentemente dal num di caratteri che ci sono prima, usando come separatore lo spazio (attenzione ai due spazi dopo \ )

cn73
17-06-2003, 13:46
Originally posted by "lovaz"

Non e' meglio cosi'?
... | cut -d \ -f 3

ti estrae il terzo campo, indipendentemente dal num di caratteri che ci sono prima, usando come separatore lo spazio (attenzione ai due spazi dopo \ )

ottimo! Le varianti ovviamente sono molte ;)

ElMato
17-06-2003, 20:27
Vi ringrazio x il vostro aiuto. Ora però ho un altro problema: ho una riga come questa:

xxhgcbdsfjnoidngodgn (pippo=ciao)

e vorrei ricavare solo la parola 'ciao', come faccio?

Grazie 1000 ;)

Ciao by ElMato

Gavrila
18-06-2003, 00:40
Originally posted by "lovaz"

Non e' meglio cosi'?
... | cut -d \ -f 3

ti estrae il terzo campo, indipendentemente dal num di caratteri che ci sono prima, usando come separatore lo spazio (attenzione ai due spazi dopo \ )

non vorrei dire una vaccata ma -d \ non dovrebbe servire perche' il seperatore di default dovrebbe essere lo spazio...

Quindi IMO dovrebbe essere | cut -f 3

lovaz
18-06-2003, 08:23
Originally posted by "Gavrila"

non vorrei dire una vaccata ma -d \ non dovrebbe servire perche' il seperatore di default dovrebbe essere lo spazio...
Originally posted by "man cut"

-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter

ElMato
21-06-2003, 14:57
Vi ringrazio x il vostro aiuto. Ora però ho un altro problema: ho una riga come questa:

xxhgcbdsfjnoidngodgn (pippo=ciao)

e vorrei ricavare solo la parola 'ciao', come faccio?

Grazie 1000

Ciao by ElMato

ElMato
22-06-2003, 18:04
Up

lovaz
23-06-2003, 09:51
se la riga è esattamente del tipo che hai detto, questo fa al caso tuo

... |cut -d = -f 2 |cut -d ')' -f 1

HexDEF6
23-06-2003, 18:43
Un annetto fa mi ero fatto uno scriptino per trovare tutti i file uguali che avevo su hd (dicevo che due file erano uguali quando avevano la stessa dimensione e lo stesso md5)... e per imparare a fare lo script mi ero stampato questo:
http://www.tldp.org/LDP/abs/html/

te lo consiglio tantissimo!

Ciao!

ElMato
24-06-2003, 16:09
Grazie a tutti x il vostro aiuto, ma nn conosco bene l'inglese x capire la guida e ho risolto il problema precedente grazie a lovaz ma ora ne ho un'altro dopo aver scritto tutta la riga x catturare la parte di testo che mi interessava finivo così: .. | ./script.sh .Ora ho inserito quella riga all'interno di uno script e volevo 'leggere' il testo catturato abbinandolo a una variabile con read allora ho cambiato la fine della stringa con .. | read testo , ma nn funziona se sotto metto echo $testo nn compare nulla, cm faccio a risolvere il mio problema?

Ciao by ElMato :cool:

ElMato
25-06-2003, 12:03
Up

ElMato
26-06-2003, 10:35
Up

ElMato
27-06-2003, 12:40
Dopo che ho estratto la parte di testo come faccio ad abbianrla ad una variabile?
Prima lanciavo il comado ... |cut -d = -f 2 |cut -d ')' -f 1 | ./mioscript.sh nel file mioscript.sh mettevo:
read ciao
echo $ciao
così vedevo la riga estratta. Adesso voglio inserire il tutto in un unico script e allora ho provato a fare così:
... |cut -d = -f 2 |cut -d ')' -f 1 | read ciao && echo $ciao

ma nn funziona!! :cry:
Qualcuno mi può aiutare? :(

Ciao by ElMato ;)

lovaz
27-06-2003, 13:03
Originally posted by "ElMato"

...
... | read ciao && echo $ciao

ma nn funziona!! :cry: ...
Prova cosi':
ciao='... |cut -d = -f 2 |cut -d \) -f 1'