Digamos que tenemos lo siguiente como stdin (como ejemplo)
Life is temporary
Quiero que sed reemplace esto con
Life is permanent
con un comando en algún lugar parecido a
sed 's/Life<%XY=.*>temporary/Life%XYpermanent'
Eso sí, sé que lo anterior no es un comando válido, es para que sirva de ejemplo. Quiero almacenar todo lo que .*
coincida en una variable y quiero recuperar esa variable en la cadena de reemplazo.
Respuesta1
sed 's/Life\(.*\)temporary/Life\1permanent/'
Aquí \1
se refiere al primer par de paréntesis del patrón. Es el único par en este caso, pero en general puedes tener más pares y luego puedes usar \2
, \3
etc., hasta \9
.
Los paréntesis están escapados. Sin \
ellos se tomarían literalmente y \1
no funcionarían. Si lo usa sed -E
, se invertirá: (
será especial y \(
denotará un literal (
(tenga en cuenta que, en general, no es la única diferencia -E
):
sed -E 's/Life(.*)temporary/Life\1permanent/'
Este cambio hace que nuestro sed
código sea algo más legible para los humanos.