Newsgroup: it.comp.os.linux.sys
Titolo: Mi aiutate a fare questa cosa?

In un file di testo ho diverse rige che iniziano con un prefisso,
mettiamo per esempio XXYY, in posizioni random.
Io vorrei con un sol colpo eliminare tutte queste righe + la riga
immeditamente successiva.
Come si potrebbe fare?


man grep
switch -A
-- 
Flavio Visentin
Scientists have finally discovered what's wrong with the female brain:
On the left side, there is nothing right, and on the right side, there
is nothing left.

 switch -A
Si lo conosco ma non c'entra nulla con la mia domanda
La risposta che mi aspettavo era:
sed -e '/XXYY/,+1d'
Grazie lo stesso

 Grazie lo stesso
Era una domanda trabocchetto, la risposta la sapeva già.



sed -e '/^XXYY/,+1d'
se proprio vogliamo essere precisi con quello che avevi detto all'inizio.

 wrote:

C'entra eccome. La soluzione con grep -v -A mi sembra piu` chiara,
lineare e veloce, ma se non vuoi fare man grep sono tutti affaracci
tuoi.
Andrea


Dimenticavo, se hai una grep gnu.

 lineare e veloce, 
Peccato che non funzioni :)

Era una domanda trabocchetto, la risposta la sapeva gi�.
Si' ma e' una risposta che NON funziona, guarda:
cat testo
si 1
XXYY 1
no 1
si 2
XXYY 2
no 2
si 3
si 4
XXYY 3
XXYY 4
no 3
si 5 + 1 bianca precedente questa
XXYY 5
XXYY 6
no 4
XXYY 7
ultima si 6 -- finale: 6si + 1 bianca tra si4 e si5, tot. 7 righe
cat testo | sed -e '/XXYY/,+1d'
si 1
si 2
si 3
si 4
no 3
si 5 + 1 bianca precedente questa
no 4
ultima si 6 -- finale: 6si + 1 bianca tra si4 e si5, tot. 7 righe
Come vedi ci stanno due righe di troppo eheh.
-- 
Saluti, Dalet

 Come vedi ci stanno due righe di troppo eheh.
;-)
Ora aggiungiamo un livello di difficolta' in più.
Mettiamo che le righe di prima io non le volessi cancellare..... ma
"svuotarle" si inzomma le righe devono esserci ancora ma devono essere
vuote, come si potrebbe fare?



Sempre guardando la sfera di cristallo, direi
sed '/^XXYY/,+1{s/.*//;}'

 sed '/^XXYY/,+1{s/.*//;}'
Spendendo qualche bit in meno io ho provato
sed '/^XXYY/,+1c\\n'



Ok, hai vinto.



Ah, tra parentesi. Ti funziona per puro caso, ma quella soluzione e'
completamente errata. Hint: prova ad usare '/^XXYY/,+5c\\n' ad esempio e
vedrai.

 vedrai.
No, il caso non c'entra. Funziona perche' la soluzione e' adattata
allo scopo.
Se cambi l'esempio della soluzione devi cambiare anche il problema che
diventa:
... Come faccio a sostituire con una riga vuota, tutte le righe che
iniziano con XXYY "e le 5 righe successive?" ...
E in questo caso bisogna correggere il tuo esempio in:
sed '/^XXYY/,+5c\\n\n\n\n\n'



In questo caso, la mia versione consuma meno bytes (e non richiede di
contare quanti \n metti).
In altre parole, si chiama: soluzione generale vs. soluzione particolare.

 In altre parole, si chiama: soluzione generale vs. soluzione particolare.
ok, allora hai vinto tu ;-)


Si`, effettivamente non funziona, ma non si puo` pretendere che
funzioni sempre tutto! :-)

 funzioni sempre tutto! :-)
Infatti, basta guardare il Windows, dopo 15 anni ancora non va.

 Dimenticavo, se hai una grep gnu.
la grep sarebbe la moglie del grep? ;)
-- 
echo onailimissaM | awk 'BEGIN { FS = "" }
{ for (i = NF; i >= 1; i-- )
  printf $i }'; echo