Tengo un archivo con valores de entrada en forma de: input-prefix:value
.
Necesito reemplazar input-prefix
dos veces con una sustitución diferente y pasarla a un comando como my-command replace1-prefix:value replace2-prefix:value
. ¿Es esto posible con un solo comando o tengo que escribirlo?
Con un valor es simple
cat my-input-file | sed 's/input-prefix/replace1-prefix/' | xargs -r my-command
TIA por cualquier ayuda,
w.
Respuesta1
Puedes agrupar partes de un patrón \(\)
y luego consultarlo mediante \1
(o \2
... \9
si tienes más grupos en un patrón):
s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/
Respuesta2
También es simple con múltiples valores. Primero, puede omitir el comando cat en su tubería, debido a que sed leerá el archivo e imprimirá su salida en STDOUT
. Y sed
funciona de la manera que @Philippos lo describió (y \1
se usará dos veces ya que pertenece al primer grupo de captura). Simplemente elimine el eco en el comando xargs para ejecutar su comando. Si desea ver el comando que se llamó, puede agregar el parámetro -t
para ver el comando o -p
realizarlo de forma interactiva. Por lo tanto, debe indicar sí/no antes de ejecutar el comando.
user@pc:/tmp$ cat inputfile.txt
input-prefix1:value1
input-prefix:value
input-prefix2:value2
user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt
input-prefix1:value1
replace1-prefix:value
replace2-prefix:value
input-prefix2:value2
user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt | xargs -r echo my-command
Nota breve: esto supone que su prefijo de entrada es lo primero en la línea que desea reemplazar y el valor es el resto de la línea detrás de los dos puntos. Además, el g
modificador en el sed
comando sustituirá todas las apariciones de usted input-prefix:
dentro del archivo inputfile.txt
.