Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Come faccio ad estrapolare i campi contenuti nei tag [OWN][/OWN] e [LISTA][/LISTA] ? (Solo quelli quindi escludendo anche i tag stessi)
Grazie per l'eventuale risposta.
Sì ma io devo poter distinguere i link presenti tra i tago OWN o LISTA, come faccio a capire quale link è contenuto in 1 e quale è contenuto nell'altro ?
#!/bin/sh
OWN_START="[OWN]"
OWN_END="[/OWN]"
LISTA_START="[LISTA]"
LISTA_END="[/LISTA]"
# $1 : TAG start
# $2 : TAG end
# $3 : result variable (list)
# $4 : input file
function read_between_tags ()
{
while read ROW
do
if [ "$ROW" = "$1" ]
then
I=0
while read LIST_ROW
do
if [ "$LIST_ROW" != "$2" ]
then
eval "$3[$I]="$LIST_ROW""
I=$((I+1))
else
return 0
fi
done
fi
done < "$4"
}
read_between_tags $OWN_START $OWN_END OWN file.txt
echo -e "OWN contents:\n\t ${OWN[*]}"
read_between_tags $LIST_START $LIST_END LIST file.txt
echo -e "LISTA contents:\n\t ${LIST[*]}"
È praticamente tutto nella funzione read_between_tags: dandole in pasto il tag iniziale, quello finale, una variabile nella quale salvare il contenuto (come array) e un file, legge il file finché non incontra il tag iniziale, dopodiché riempie l'array con quel che trova prima del tag finale.
Ovviamente è migliorabile (non ho pensato a utenti "bizantini" ) però fa quel che deve col file presentato come esempio.
RedSkull92 ha scritto:Sì ma io devo poter distinguere i link presenti tra i tago OWN o LISTA, come faccio a capire quale link è contenuto in 1 e quale è contenuto nell'altro ?
Si ma tu questo prima non l'avevi detto .
Bisogna capire cosa intendi per "distinguere". Questo scriptino sed:
io da quest'output li distinguo benissimo. Però, alternativamente puoi scrivere tutti i siti sotto 'OWN' nel file 'own' e tutti quelli di 'LISTA' nel file 'lista', in questo modo:
for tag in OWN LIST
do
sed -n -e $(grep -n $tag <file>|cut -d':' -f1|sed 'N;s/\n/,/')p <file>|sed -e 1d -e $\d > $tag.tag
done
E' pratica perché è sufficiente cambiare la lista in testa al ciclo per estrarre il contenuto di qualsiasi serie di tag. Inoltre la redirezione dell'output in un file <tag>.tag si può facilmente cambiare in un assegnamento a variabile o qualsivoglia target. Non ci ho perso molto tempo: si può rendere più robusto affinando l'argomento di grep per evitare falsi risultati.
Il codice postato da Alabtrosta è perfetto.
Io ho provato ad usare le regex ma non ho trovato il modo per farmi prendere i valori che volevo.
Grazie per l'immenso aiuto ragazzi.