
Me gustaría cambiar la línea "disable = yes" por "disable = no" en el siguiente archivo:
[root@centos2 ~]# cat /etc/xinetd.d/tftp
service tftp
{
...
server_args = -s /var/lib/tftpboot
disable = yes
per_source = 11
...
}
Probé esto:
[root@centos2 ~]# grep 'disable = yes' /etc/xinetd.d/tftp
[root@centos2 ~]#
simplemente copiando el espacio con el mouse pero no captura nada...
¿Por qué y cómo puedo saber cuáles son los elementos entre "disable" y "="? ¿Son varios espacios? tabulaciones?
Sé que puedo grep usando la siguiente expresión regular:
[root@centos2 xinetd.d]# grep -E 'disable.+= yes' /etc/xinetd.d/tftp
disable = yes
[root@centos2 xinetd.d]#
Y, por último, ¿existe una mejor manera de reemplazar "sí" por "no" usando sed que la siguiente:
[root@centos2 xinetd.d]# sed -r 's/disable.+= yes/disable =
no/g' /etc/xinetd.d/tftp
service tftp
{
...
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
...
}
EDITAR :
Resultado del comando od gracias @ilkkachu
[root@centos2 xinetd.d]# < /etc/xinetd.d/tftp grep disable | od -c
0000000 \t d i s a b l e
0000020 = y e s \n
0000037
Respuesta1
Los espacios se conocen más comúnmente como "espacios en blanco" y pueden incluir no sólo espacios sino también tabulaciones (y otros caracteres "en blanco"). En una expresión regular, a menudo puede hacer referencia a estos con [[:space:]]
o \s
(dependiendo del motor RE), que incluye amboshorizontal(espacio, tabulación y algunos caracteres de espaciado Unicode de varios anchos si están disponibles) para los cuales también puede usar [[:blank:]]
y a veces \h
yverticalcaracteres de espaciado (como avance de línea, avance de página, tabulación vertical o retorno de carro). [[:space:]]
a veces se utiliza en lugar de [[:blank:]]
para cubrir el carácter falso de retorno de carro en archivos de texto de Microsoft.
No se puede reemplazar con grep
: es solo una herramienta de búsqueda. En su lugar, para reemplazar yes
con no
puedes usar un comando como este:
sed '/disable\>/s/\<yes\>/no/' /etc/xinetd.d/tftp
Esto indica sed
que se sustituya (cambie) la palabra yes
en no
cualquier línea que contenga la palabra disable
. (El \>
(inicialmente un operador ex
/ vi
regexp), en algunas sed
implementaciones, fuerza un final de palabra (aunque tenga cuidado, no espalabras delimitadas por espacios en blanco, también coincidiría con disable-option
)). Convenientemente, esto evita por completo la cuestión de los espacios en blanco.
Tenga cuidado: con una línea como , se aplicaría eyes yes
una sustitución ilimitada a la primera instancia de y lo dejaría con . Por eso lo he usado en lugar de simplemente .yes
yes
eno yes
\<yes\>
yes
Respuesta2
¿Por qué y cómo puedo saber cuáles son los elementos entre "disable" y "="? ¿Son varios espacios? tabulaciones?
Probablemente pestañas. Podrías usar algo como
< /etc/xinetd.d/tftp grep disable | od -c
para ver. Mostrará pestañas como \t
y espacios como espacios.
Respuesta3
Pruebe la alternativa grep llamadatamizardetamizar-tool.org- es un grep con esteroides que realiza una coincidencia inteligente de patrones de expresiones regulares