aiuto con sed
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
aiuto con sed
Ciao a tutti,
ho un problemino che vorre risolvere con sed ma non riesco:
devo fare alcune sostituzioni in un file html che contiene alcune righe in php. Il problema è che il pattern che che cerco può trovarsi sia nell'html che nel php e devo sostituirlo solo nell'html. Faccio un esempio per spiegarmi meglio
file html:
...
<body>
<p>hello</p>
<?=$hellofriends ?>
....
se volessi sostituire hello con ciao nella parte html senza sostituirlo nalle parte php come potrei usare sed? oppure ci sono strumenti migliori?
(i tag di apertura del php possono variare; ho fatto diverse prove con espressioni regolari ma non sono venuto a capo)
ogni consiglio sarà molto apprezzato
ho un problemino che vorre risolvere con sed ma non riesco:
devo fare alcune sostituzioni in un file html che contiene alcune righe in php. Il problema è che il pattern che che cerco può trovarsi sia nell'html che nel php e devo sostituirlo solo nell'html. Faccio un esempio per spiegarmi meglio
file html:
...
<body>
<p>hello</p>
<?=$hellofriends ?>
....
se volessi sostituire hello con ciao nella parte html senza sostituirlo nalle parte php come potrei usare sed? oppure ci sono strumenti migliori?
(i tag di apertura del php possono variare; ho fatto diverse prove con espressioni regolari ma non sono venuto a capo)
ogni consiglio sarà molto apprezzato
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Re: aiuto con sed
Di HTML e PHP non so niente, però da quello che ho capito inizia sempre con un tag <html> che può avere parametri e finisce con un <html/>. Prova tanto sed ti fa il backup:
Codice: Seleziona tutto
sed -ie '/<html\( [^>]\+\)*>/,/<html\/>/s/nome/sostituto/g' nomefileRe: aiuto con sed
Grazie anycolouryoulike,
anche se non risolutivo sono partito dal tuo suggerimento e ho risolto così:
sed -e '/\(<\?\).*\$.*\(\?>\)/!s/>find</>replace</g' file
che poi in realtà è stato suffciente così:
sed -e 's/>find</>replace</g' file
(ma dopo del lavoro preliminare di scrematura
anche se non risolutivo sono partito dal tuo suggerimento e ho risolto così:
sed -e '/\(<\?\).*\$.*\(\?>\)/!s/>find</>replace</g' file
che poi in realtà è stato suffciente così:
sed -e 's/>find</>replace</g' file
(ma dopo del lavoro preliminare di scrematura
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: aiuto con sed
Ma tu vuoi proteggere tutto ciò che è compreso tra <? e ?> ?
Spina
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Re: aiuto con sed
Credo di si...
Secondo me non è possibile.
Secondo me non è possibile.
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: aiuto con sed
Bhé, in linea di massima niente è impossibile, ma prima di mettermi giù a pensare, mi piacerebbe capire quanto interessa ad aghnosci risolvere il suo problemaanycolouryoulike ha scritto:Credo di si...
Secondo me non è possibile.
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Re: aiuto con sed
Io l'ho presa come una sfida.
Ci sto pensando ma mi sembra proprio impossibile, almeno con sed.
Ci sto pensando ma mi sembra proprio impossibile, almeno con sed.
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Re: aiuto con sed
Impossibile, sicuramente.
Non è possibile escludere dei pattern dalla sostituzione, solo linee.
Non è possibile escludere dei pattern dalla sostituzione, solo linee.
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: aiuto con sed
anycolouryoulike ha scritto:Impossibile, sicuramente.
Non è possibile escludere dei pattern dalla sostituzione, solo linee.
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Re: aiuto con sed
Ma veramente? Con un solo comando?
Allora le possibilità sono due: o hai trovato un comando che non è scritto neanche nella man page oppure hai scritto una espressione regolare veramente perversa.
Se è la prima puoi anche dirlo, se è la seconda continuo a pensarci.
Allora le possibilità sono due: o hai trovato un comando che non è scritto neanche nella man page oppure hai scritto una espressione regolare veramente perversa.
Se è la prima puoi anche dirlo, se è la seconda continuo a pensarci.
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: aiuto con sed
Si fa con sed e i comandi sono tutti nella man page, ma ancora non ci sono arrivato neanche io, dammi qualche minuto. Accidenti, hai invogliato anche meanycolouryoulike ha scritto:Ma veramente? Con un solo comando?
Allora le possibilità sono due: o hai trovato un comando che non è scritto neanche nella man page oppure hai scritto una espressione regolare veramente perversa.
Se è la prima puoi anche dirlo, se è la seconda continuo a pensarci.
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: aiuto con sed
Ecco qui, tutto quello che è tra '<?' e '?>' viene preservato.
File casa.txt
Comando:
Spina
P.S. Forse si può anche migliorare, ma non ci ho pensato molto.
File casa.txt
Codice: Seleziona tutto
<body>
<p>hello</p>
<?=$hellofriends ?>
<? hello
salut hello
casa hello
?>
hello
casa
Codice: Seleziona tutto
sed -n '/<?.*?>/{p;d};/<?/{p;b skip};s/hello/CIAO/g;p;d;:skip n;/?>/{p;d};p;b skip;' casa.txtP.S. Forse si può anche migliorare, ma non ci ho pensato molto.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Re: aiuto con sed
Io ci stavo provando con s///g...
Che sono i ; e :skip n?
Domani forse lo capirò
Che sono i ; e :skip n?
Domani forse lo capirò
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: aiuto con sed
Forse hai ragione, è un pò troppo criptico.
File casa.txt
file sed.script
Comando:
Output:
Spero ti possa aiutare a capire
. E spero anche che sia utile all'autore del thread.
Spina
File casa.txt
Codice: Seleziona tutto
<body>
<p>hello</p>
<?=$hellofriends ?>
<? hello
salut hello
casa hello
?>
hello
casa
Codice: Seleziona tutto
# Stampo (preservo dal comando s) tutte le righe che hanno <? e ?>
/<?.*?>/{
p; # Stampo la riga
d; # Passo alla riga successiva (ricomincia il ciclo)
}
# Se incontro un <?
/<?/{
p; # Stampo la riga (la preservo dal comando s)
b skip; # GOTO etichetta skip
}
# Se nessuna delle due espressioni regolari ha matchato sulla riga corrente
s/hello/CIAO/g; # Faccio la sostituzione
p; # Stampo la riga
d; # Passo alla riga successiva (ricomincia il ciclo)
# Etichetta skip, stampo (preservo) tutte le righe sino a che non incontro un '?>'
:skip
n; # Leggo la riga successiva
# La riga ha un '?>'
/?>/{
p; # Stampo la riga
d; # Passo alla riga successiva (ricomincio il ciclo)
}
# Non aveva un '?>'
p; # Stampo la riga
b skip; # GOTO etichetta skip
Codice: Seleziona tutto
sed -f sed.script casa.txtCodice: Seleziona tutto
<body>
<p>CIAO</p>
<?=$hellofriends ?>
<? hello
<? hello
salut hello
salut hello
casa hello
casa hello
?>
CIAO
casa
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- anycolouryoulike
- Packager

- Messaggi: 1158
- Iscritto il: ven 10 ago 2007, 0:00
- Slackware: 12.2
- Kernel: 2.6.34.8
- Desktop: KDE 3.5.10
Re: aiuto con sed
Rincomincia il ciclo sarebbe rincomincia lo script dall'inizio usando la riga successiva? Cioé d?
Invece n passa alla riga successiva senza tornare all'inizio dello script?
Comunque per imparare il man non serve più di tanto, è troppo astratto.
Molto meglio info sed.
E se mettessi un tag HTML tra due tag PHP nella stessa linea?
Ci vorrebbe un espressione regolare che verifichi tutto tranne una parola (?>), contando (non se se è possibile) che all'interno del tag PHP potrebbe esserci anche un ? non seguito da un >.
Questo è impossibile veramente, forse un limite delle espressioni regolari.
Invece n passa alla riga successiva senza tornare all'inizio dello script?
Comunque per imparare il man non serve più di tanto, è troppo astratto.
Molto meglio info sed.
E se mettessi un tag HTML tra due tag PHP nella stessa linea?
Ci vorrebbe un espressione regolare che verifichi tutto tranne una parola (?>), contando (non se se è possibile) che all'interno del tag PHP potrebbe esserci anche un ? non seguito da un >.
Questo è impossibile veramente, forse un limite delle espressioni regolari.
