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.
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:
Cerca una riga che inizia con projdir
e 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 -i
dice sed
di scrivere le modifiche direttamente .ignore
, invece di di riproporli
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
.
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.
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