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