devi usare sed? Se state scrivendo uno script bash, si può fare
#!/bin/bash
pattern='abc'
replace='def'
file=/path/to/file
tmpfile="${TMPDIR:-/tmp}/$(basename "$file").$$"
while read -r line
do
echo ${line/$pattern/$replace}
done < "$file" > "$tmpfile" && mv "$tmpfile" "$file"
Con un guscio vecchio Bourne (come ksh88 o POSIX sh), non si può avere quel fresco ${var/pattern/replace}
struttura, ma si ha ${var#pattern}
e ${var%pattern}
, che può essere usato per dividere la corda e poi rimontarla. Se avete bisogno di farlo, ci si trova per un codice molto di più - ma non è davvero troppo male.
Se non si è già in uno script di shell, è possibile creare facilmente i parametri pattern, replace e filename e chiamare semplicemente questo. :)
PS: la struttura $ {TMPDIR: -/tmp} utilizza $ TMPDIR se è impostata nel proprio ambiente o utilizza/tmp se la variabile non è impostata. Mi piace incollare il pid del processo corrente alla fine del nome del file nella speranza che sia leggermente più unico. Probabilmente dovresti usare mktemp o simili nel "mondo reale", ma questo è ok per un rapido esempio e il binario mktemp non è sempre disponibile.
possibile duplicato di [Fuga una stringa per modello di ricerca sed] (http://stackoverflow.com/questions/407523/escape-a-string-for-sed-search-pattern) –