regular pattern online regex linux unix sed

regex - pattern - sed-Comentando una línea que coincide con una cadena específica Y que aún no está comentada



sed regex online (4)

En realidad, no necesita el signo de exclamación (!) Ya que el símbolo de intercalación ya niega lo que esté dentro de los corchetes e ignorará todo el símbolo de almohadilla de su búsqueda. Este ejemplo funcionó para mí:

sed -i ''/[^#]/ s//(^.*BBB.*$/)/#/ /1/'' file

Tengo el siguiente archivo de prueba

AAA BBB CCC

Usando el siguiente sed puedo comentar la línea BBB .

# sed -e ''/BBB/s/^/#/g'' -i file

Me gustaría solo comentar la línea si aún no tiene un # al principio.

# sed -e ''/^#/! /BBB/s/^/#/g'' file sed: -e expression #1, char 7: unknown command: `/''

¿Alguna idea de cómo puedo lograr esto?


Encuentro que esta solución funciona mejor.

sed -i ''/![^#]/ s//(^.*BBB.*$/)/#/ /1/'' file

No importa cuántos símbolos "#" haya, nunca agregará otro. Si el patrón que está buscando no incluye un "#", lo agregará al comienzo de la línea y también agregará un espacio al final.

Si no quieres un espacio al final

sed -i ''/![^#]/ s//(^.*BBB.*$/)/#/1/'' file


Suponiendo que no tiene ninguna línea con múltiples # s, esto funcionaría:

sed -e ''/BBB/ s/^#*/#/'' -i file

Nota: no necesita / g ya que está haciendo como máximo una sustitución por línea.


sed -i ''/![^#]/ s//(^.*BBB.*$/)/#/ /1/'' file

Esto no funciona para mí con la palabra clave *.sudo , sin comentarios ...

Ony la sintaxis a continuación funciona: sed -e ''/sudo/ s/^#*/#/'' file