Estoy tratando de reemplazar varias palabras en el archivo usando sed -i #expression1 #expression2
archivo
Something 123 item1
Something 456 item2
Something 768 item3
Something 353 item4
Salida (deseada)
anything 123 stuff1
anything 456 stuff2
anything 768 stuff3
anything 353 stuff4
Audiciones
Puedo obtener la siguiente salida usando sed -i
2 veces.
sed -i 's/Some/any/g' file
sed -i 's/item/stuff/g' file
¿Puedo tener alguna forma posible de hacer esto como un solo comando en el lugar como
sed -i 's/Some/any/g' -i 's/item/stuff/g' file
Cuando probé el código anterior, se toma s/item/stuff/g
como un archivo e intento trabajar en él ...
shell
shell-script
text-processing
sed
JigarGandhi
fuente
fuente
sed - i 's/Some\(.*\)item/any\1stuff/' file
Respuestas:
Dependiendo de la versión de
sed
su sistema, puede hacerNo necesita
g
después de la barra final en els
comando aquí, ya que solo está haciendo un reemplazo por línea.Alternativamente:
La
-i
opción le dicesed
que edite los archivos en su lugar; si hay caracteres inmediatamente después,-i
luegosed
realiza una copia de seguridad del archivo original y usa esos caracteres como la extensión del archivo de copia de seguridad. P.ej,o
modificará
file
, guardando el original enfile.bak
.Por supuesto, en un sistema Unix (o similar a Unix), normalmente usamos '~' en lugar de '.bak', por lo que
fuente
-i
. Así quesed -i '' 's/a/b/;s/c/d/' file
osed -i .back 's/a/b/;s/c/d/'
osed -i.back 's/a/b/;s/c/d/'
no. Otrassed
implementaciones generalmente no son compatibles-i
.-i
y la extensión.sed -i 's/$username = "root"/$username = "newuser"/; s/$password = "password"/$password = "passwd"/; s/$dbname="handicraftstore"/$dbname="handicraft"' Web/database.php
resultadossed: -e expression #1, char 141: unterminated
's
comando le falta el final/
.Puede encadenar expresiones sed junto con ";"
fuente
Expresión múltiple usando múltiples
-e
opciones:o puedes usar solo uno:
Debe dar una extensión para el archivo de respaldo, ya que cuando alguna implementación de
sed
, como OSX sed , no funciona con una extensión vacía (debe usarsed -i ''
para anular los archivos originales).fuente
Puede usar Vim en modo Ex:
%
seleccione todas las líneass
sustituirx
guardar y cerrarfuente