2015-09-16 21 views
8

Sono nuovo nello script di bash e sto cercando di sostituire alcune parole nel mio file usando sed. In seguito è la bash che uso nel mio script:Errore sed: bandiera errata in comando sostitutivo: 'U'

sed -i '' "s/<pre>.*<\/pre>/<pre>($NEWNAME) $MD5<\/pre>/"~/Desktop/replace.html 

ed ho ottenuto un messaggio di errore che dice: bad flag in substitute command: 'U'. Uso il doppio preventivo perché devo inserire le variabili.

Il mio ambiente è Mac.

======================================

1.Turns fuori Ho dimenticato di lasciare uno spazio tra la stringa di sostituzione e il nome del file. Che ha portato al risultato sempre mostrando: bad flag in substitute command: '~'. Ora funziona.

2. Il motivo è che ho usato MD5=$(md5 path) di creare valore MD5 che ottiene la Reault di MD5 (path) *****, e il percorso contiene / che rompe la regex. Dopo aver modificato MD5=$(md5 -q path), sarà ok.

+1

Non utilizzare strumenti di elaborazione del testo per modificare HTML. Utilizzare uno strumento progettato per lavorare con HTML. –

+0

@ TomFenech Grazie. Ma devo caricare file e modificare il valore md5 nel codice HTML usando lo script della shell. Hai qualche idea migliore per questo? – JasmineOT

+0

Utilizzare un linguaggio che supporti la modifica di HTML, come Perl, Python, PHP, Ruby, ... –

risposta

10

Molto probabilmente la variabile $NEWNAME ha una barra in avanti, che viene utilizzata come delimitatore di espressioni regolari in sed. Prova questo sed con un delimitatore alternato ad es. ~:

sed -i '' "s~<pre>.*</pre>~<pre>($NEWNAME) $MD5</pre>~" ~/Desktop/replace.html 
+0

Grazie per la tua risposta rapida. Io echo queste variabili e trovo 'MD5' la barra di avanzamento. Ma usando delimitatore alternativo come '~' si otterrà un errore simile: 'bandiera errata in comando sostitutivo: '~'' – JasmineOT

+0

Puoi anche usare caratteri di controllo come delimitatore di sed, ad es. 'sed -i ''" s^A

.*
^A
($NEWNAME) $MD5
^A "' dove '^ A' viene digitato premendo' control-V-A' insieme. – anubhava

+0

OK, per essere onesti, questa è la prima volta che arrivo al concetto di delimitatore alternativo. Quindi grazie mille. Continuerò a provare. – JasmineOT