No hay que usar sed? Si estás escribiendo un script bash, puede hacerlo
#!/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 una cáscara de Bourne mayores (como ksh88 o SH POSIX), puede que no tenga que ${var/pattern/replace}
estructura fresco, pero usted tiene ${var#pattern}
y ${var%pattern}
, que se puede usar para dividir la cuerda y luego volver a montarla. Si necesita hacer eso, tendrá mucho más código, pero en realidad no es tan malo.
Si no estás en un script de shell ya, muy fácilmente podría hacer que el patrón, reemplazar, y los parámetros de nombre de archivo y simplemente llamar a esto. :)
PS: la estructura $ {TMPDIR: -/tmp} usa $ TMPDIR si eso está establecido en su entorno, o usa/tmp si la variable no está configurada. Me gusta pegar el pid del proceso actual al final del nombre de archivo con la esperanza de que será un poco más único. Probablemente deberías usar mktemp o similar en el "mundo real", pero esto está bien para un ejemplo rápido, y el binario mktemp no siempre está disponible.
posible duplicado de [Escape una cadena de patrón de búsqueda SED] (http://stackoverflow.com/questions/407523/escape-a-string-for-sed-search-pattern) –