¿Cómo reemplazar una línea completa con sed?


132

Supongamos que tengo un archivo con líneas

aaa = bbb

Ahora me gustaría reemplazarlos con:

aaa = xxx

Puedo hacer eso de la siguiente manera:

sed "s / aaa = bbb / aaa = xxx / g"

Ahora tengo un archivo con algunas líneas de la siguiente manera:

aaa = bbb
aaa = ccc
aaa = ddd
aaa = [algo más]

¿Cómo puedo reemplazar todas estas líneas aaa=[something]con el aaa=xxxuso de sed ?


2
¿Es [something else]el texto literal, o es solo un marcador de posición? ¿Cuál es el formato posible de la cosa después del signo igual?
ean5533

eso es más una pregunta regex, no una pregunta sed.
SaferJo

Respuestas:


217

Prueba esto:

sed "s/aaa=.*/aaa=xxx/g"

44
Fuerza de la costumbre, puede ignorarse en este caso: se usa como un reemplazo global de la línea para reemplazar cada coincidencia en lugar de solo la primera. En este caso, aunque solo el primero se igualará debido a .*.
John Doyle

1
Michael J. Barber, greemplace todas las instancias de regexp con reemplazo
A-IV

116

También puede usar la línea de cambio de sed para lograr esto:

sed -i "/aaa=/c\aaa=xxx" your_file_here

Esto pasará y encontrará cualquier línea que pase la aaa=prueba, lo que significa que la línea contiene las letras aaa=. Luego reemplaza toda la línea con aaa = xxx. Puede agregar un ^al comienzo de la prueba para asegurarse de que solo obtiene las líneas que comienzan aaa=pero eso depende de usted.


12
OS X seddebe cir seguido de una barra diagonal inversa y una nueva línea, y no agrega una nueva línea al texto insertado, pero puede usar, por ejemplo $'/aaa=/c\\\naaa=xxx\n'.
Lri

Aquí hay un ejemplo en la documentación de sed de la función de cambio / reemplazo que @Mr. T está hablando.
gene_wood

Esto es lo más cercano a hacer realmente lo que se le pidió ... (Pero la versión de Lri es necesaria para la portabilidad)
Gert van den Berg

42

Me gusta esto:

sed 's/aaa=.*/aaa=xxx/'

Si desea garantizar que aaa=esté al comienzo de la línea, hágalo:

sed 's/^aaa=.*/aaa=xxx/'

1
¿Qué pasa si quiero reemplazar con aaa = 'xxxx'? Intenté escapar como, sed 's/aaa=.*/aaa=\'xxx\'/'pero eso abre un >mensaje en una nueva línea ...
Nagev

2

Si desea utilizar, awkentonces esto también funcionaría

awk -F= '{$2="xxx";print}' OFS="\=" filename

2
sed -i.bak 's/\(aaa=\).*/\1"xxx"/g' your_file

0

Esto podría funcionar para usted:

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx

No creo que una comprobación explícita para bbb, cccy dddes bastante lo que el PO tenía en mente.
spinup
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.