Come posso sostituire il testo dopo una parola specifica usando sed?


12

Ho un file chiamato .ignore. Necessario sostituire il projdir. Per esempio:

ignore \..*
ignore README
projdir Snake

Devo sostituire Snake con, ad esempio, "PacMan". Ho letto la pagina man, ma non ho idea di cosa fare.

Risposte:


18

Cerca una riga che inizia con projdire sostituisci l'intera riga con una nuova:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^e $sono marcatori di inizio / fine linea, quindi il motivo corrisponderà all'intera linea; .*corrisponde a qualsiasi cosa. La -idice seddi scrivere le modifiche direttamente .ignore, invece di di riproporli


5

Un approccio consiste nel riscrivere l'intera riga, utilizzando i riferimenti indietro per le parti che si desidera conservare:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

Un altro approccio è quello di riscrivere quella parte della riga, ma solo se qualche altra parte corrisponde:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

Entrambi gli esempi riscrivono la seconda parola delimitata da spazi bianchi su righe in cui si trova la prima parola projdir.


3

Anche se questo è un vecchio post e sembra essere stato risolto per te dalla risposta accettata, la vera domanda non ha ricevuto risposta. Quindi per completezza e per aiutare gli altri:

Qui la risposta che corrisponde effettivamente a "Snake" e non alle righe che iniziano con "projdir" ...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

Questo sostituisce tutto dall'inizio della linea incluso "Snake" con tutto prima di "Snake" + "PacMan". \ 1 sta per cosa corrisponde all'interno (). Tutto dopo "Snake" rimane intatto.


1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdir è trovare la linea che inizia con projdir stringa. Il. * $ Indica la stringa dopo projdir nella stessa riga. Il proManager di stringa PacMan è la stringa con cui stiamo sostituendo. g sta per global - per sostituire tutte queste righe a partire da projdir. .ignore è il nome del file


1
Potete per favore estendere la vostra risposta e chiarire cos'è?
Romeo Ninov,

Le risposte sono molto più utili se includono spiegazioni su come e perché un comando o un pezzo di codice funzionano.
Anthony Geoghegan,

Spero che questo sia più utile dopo la modifica
Tinu
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.