
Hay un ejemplo en esto.enlaceacerca de sed
:
Para eliminar el primer número en todas las líneas que comienzan con "#", utilice:
sed '/^#/ s/[0-9][0-9]*//'
¿Cuál es el beneficio del primer patrón ( /^#/
)? Podría ser simplemente:
sed 's/^#[0-9][0-9]*//'
Respuesta1
El formato general de sed
los comandos es
[address[,address]] function
Cuando un comando tiene una única dirección, opera en todas las líneas que coinciden con esa dirección. Cuando un comando no tiene dirección, opera en cada línea.
Referencia:POSIXsed
En cuanto a sus ejemplos específicos:
/^#/ s/[0-9][0-9]*//
Este comando tiene una dirección,
/^#/
que coincide con todas las líneas que comienzan con#
.El patrón de sustitución es
/[0-9][0-9]*/
. Esto coincide con la primera secuencia de dígitos dondequiera que aparezca en la línea.Resumen en inglés sencillo: elimina la primera secuencia de dígitos en cada línea que comienza con
#
.Ejemplo:
# non-digits|5555|non-digits|5555
se convierte# non-digits||non-digits|5555
s/^#[0-9][0-9]*//
No hay dirección, por lo que este comando opera en cada línea.
El patrón de sustitución,
/^#[0-9][0-9]*/
coincide con una secuencia de dígitos consecutivos precedidos por un#
ancladoal principio de la línea.Resumen en inglés sencillo: eliminar
#
seguido de una secuencia de dígitos (y solo ese patrón) desde el principio de cada línea.Ejemplo:
#5555|non-digits|5555
se convierte en|non-digits|5555
, pero# non-digits|5555|non-digits|5555
no cambia porque el patrón de sustitución no coincide.
Respuesta2
El primero igualará y sustituirá:
#abc99
El segundo no lo hará.
Además, el segundo también eliminará el inicial #
.