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 sedbueno 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 awko sedy luego usar este número en un sedcomando 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
sle dicesedque 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 palabrabluecon cualquier cosa antes y después. El siguiente paréntesis (\)) cierra la agrupación.El reemplazo es el
\1que es una referencia al contenido del primer grupo de agrupación.fuente
Puede usar Vim en modo Ex:
ssustituirxguardar y cerrarfuente