
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.0
o 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