sed: -e expresión n.º 1, carácter 44: expresión regular de dirección sin terminar

sed: -e expresión n.º 1, carácter 44: expresión regular de dirección sin terminar

PROBLEMA:

Estoy escribiendo un script para configurar las instalaciones de Debian... Necesito comentar la línea en sources.list para el DVD, estoy intentando usar sed, sé cómo eliminar la línea o líneas pero quiero para comentarlo en su lugar.

Lo que tengo es esto:

sed -i '/deb cdrom:[Debian GNU/Linux 9.4.0 _S/s/^/#/' /etc/apt/sources.list

pero me da este error:

sed: -e expression #1, char 44: unterminated address regex

Supongo que el problema es el soporte.

PREGUNTA:

¿Cuál es el problema aquí y cómo se soluciona el comando y/o hay alguna otra forma de hacerlo?

Respuesta1

Prueba esto,

  sed -i '/deb cdrom:\[Debian GNU\/Linux 9\.4\.0 _S/s/^/#/' /etc/apt/sources.list
  • Necesitamos escapar de [, /y .en el patrón de búsqueda, /porque es el delimitador y [y .porque son operadores de expresiones regulares.

Respuesta2

Dado que la cadena de búsqueda es una constante, y la presencia de metacaracteres de expresiones regulares es lo irritante, también puedes hacerlo de la siguiente manera:

 awk -i inplace 'index($0, "deb cdrom:[Debian GNU/Linux 9.4.0 _S"){$0 = "#" $0}1' /etc/apt/sources.list

Estás de suerte si tienes acceso a GNU awk 4.1.0o superior para el efecto de edición in situ. OTW, te puede venir bien con Perl:

perl -pi -e 's/^/#/ if index($_, "deb cdrom:[Debian GNU/Linux 9.4.0 _S") + 1' /etc/apt/sources.list

información relacionada