En un archivo que contiene líneas como esta:
# lorem ipsum blah variable
Me gustaría eliminar el carácter #
(comentario) en la misma línea que contiene una cadena específica, en su lugar. ¿Es sed
bueno para esto?
Estoy luchando para que este condicional funcione. Tengo una forma "torpe" de hacer esto; Puedo encontrar el número de línea coincidente con awk
o sed
y luego usar este número en un sed
comando separado , pero creo que esto se puede hacer de una manera mucho mejor.
's/#//g'
eliminará todos los#
caracteres en la línea. Si eso no es lo que desea, elimine elg
(que significa "global"). (2) Para editar un archivo en su lugar (como se solicitó en la pregunta), usesed -i
.sed -i '/ipsum/s/#[[:space:]]*//'
, para deshacerse de los espacios y pestañas inmediatamente después de la#
. (4) También es posible que desee considerar verificar que#
sea el primer carácter no en blanco de la línea. El comando actual eliminaría el#
de la líneaprompt "Enter # of ipsums:"
.sed -i '/ipsum/s/^#[[:space:]]*//'
?! (^
significa inicio de línea,$
para final de línea) - al menos en gnu sed ...^
, pero eso estaría mal. A menudo comento el código sangrado colocando el#
inmediatamente antes del código, por lo que#
está sangrado. Dudo que sea la única persona que hace eso.^
Y#
, por lo que algo de la misma familia:/ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}
. Aunque incluso entonces, dependiendo de dónde#
esté, aún puede causar problemas (por ejemplo, en idiomas que usan sangría / separación de espacios en blanco).luego:
da:
Funciona de la siguiente manera:
El
s
le dicesed
que debe sustituir lo que encuentra la expresión regular.El patrón es el
# \(.*blue.*\)
que se descompone en: Encuentra un hash seguido de un espacio. El corchete (\(
) comienza la agrupación..*blue.*
Es la palabrablue
con cualquier cosa antes y después. El siguiente paréntesis (\)
) cierra la agrupación.El reemplazo es el
\1
que es una referencia al contenido del primer grupo de agrupación.fuente
Puede usar Vim en modo Ex:
s
sustituirx
guardar y cerrarfuente