Individua la posizione, quindi fai una modifica usando sed


11

Questo script usa sed per cambiare tutto "" in "nuove cose". Come cambierebbe il "" dopo il yyy: usando sed o qualcos'altro?

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt

Risposte:


8

Potrei non capire la tua domanda. Se si desidera sostituire SOLO il valore dopo 'yyy', utilizzare la risposta precedente. Se vuoi sostituire QUALSIASI valore dopo 'yyy', prova questo one-liner:

sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt

Non l'ho provato: D ...


3

Risposta raccolta da O'Reilly - Sed & Awk 2nd Addition Intorno a pagina 152

Scrivi uno script in un file

/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}

Applicalo ai tuoi dati con il solito

sed -f script sample.txt

Questo script dice cercare yyy :. Quando viene trovato, leggi un'altra riga nel buffer dei pattern (suona come Star Trek Transporter). Ora fai come / comando sulle linee unite. Quindi stiamo cercando yyy: newline "". Se trovato sostituire con yyy: \ notice backslash effettivo newline quindi "new stuff"

In bocca al lupo


1
vedi la pagina man: unixhelp.ed.ac.uk/CGI/man-cgi?sed ricerca indirizzi paragrafo

1

Trovo che quando le cose superano un certo livello di complessità, passo al perl . s2p gestirà la traduzione della tua attuale soluzione sed. Oppure potresti scriverlo da zero banalmente. L'espressione di ricerca / sostituzione rimarrà la stessa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.