Domanda

Sto scrivendo uno script di shell (bash) e sto cercando di capire un modo semplice per realizzare un compito semplice.

Ho qualche stringa in una variabile. Non so se questo è rilevante, ma può contenere spazi, a capo, perché in realtà questa stringa è il contenuto di un file di testo complesso.

Voglio sostituire l'ultima occorrenza di una certa stringa con qualcos'altro. Forse potrei usare un'espressione regolare per questo, ma ci sono due momenti che mi confondono:

  • ho bisogno di corrispondere dalla fine, non dall'inizio
  • la stringa che voglio per la ricerca di è fisso, non variabile.
È stato utile?

Soluzione

  • per troncare alla partenza: ${var#pattern}
  • troncare alla fine ${var%pattern}
  • ${var/pattern/repl} per la sostituzione generale

i modelli sono espansione stile 'nome', e l'ultima possono essere preceduti da # o % per abbinare solo all'inizio o alla fine (rispettivamente)

è tutto nel (lungo) bash pagina di manuale. controllare il capitolo "Parametri di espansione".

Altri suggerimenti

espressione AMN come questo

s/match string here$/new string/

dovrebbe fare il trucco - s è per sustitute, / rompere il comando, ed il $ è la fine della linea marcatore. Si può provare questo nel VI per vedere se fa ciò che è necessario.

Vorrei cercare le pagine man per awk o sed.

La risposta di Javier è coperture specifiche e non funzionerà in tutte le shell.

Le risposte sed che MrTelly e epochwolf alluso sono incompleti e dovrebbe essere simile a questa:

MyString="stuff ttto be edittted"
NewString=`echo $MyString | sed -e 's/\(.*\)ttt\(.*\)/\1xxx\2/'`

Il motivo per cui questo funziona senza dover utilizzare il $ per segnare la fine è che il primo '*' è avido e tenterà di raccogliere il più possibile pur consentendo il resto della espressione regolare per essere vero.

Questo comando sed dovrebbe funzionare bene in qualsiasi contesto shell utilizzata.

Di solito quando vengo attaccato con Sed Io uso questa pagina

http://sed.sourceforge.net/sed1line.txt

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top