cómo reemplazar con expresiones regulares antes de dos puntos?
Este es mi texto original:
NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
Quiero agregar una barra invertida solo antes de todos los espacios antes de :
. Entonces, esto es lo que finalmente quiero:
NetworkManager/system\ connections/Wired\ 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
Necesito hacer esto en bash, por lo que sed, awk y grep están bien para mí.
He intentado el siguiente sed, pero ninguno de ellos funciona:
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/ .*\(:.*$\)/\\ .*\1/g'
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/\( \).*\(:.*$\)/\\ \1.*\2/g'
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/ .*\(:.*$\)/\\ \1/g'
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/\( \).*\(:.*$\)/\\ \1\2/g'
Gracias por responder mi pregunta. Soy bastante nuevo en Stack Overflow, no sé cómo controlar el formato en los comentarios. Así que solo edito mi pregunta original.
Mi verdadera historia es:
Cuando uso grep
o uso cscope
para buscar una palabra clave, por ejemplo, “address1” en la carpeta /etc, el resultado sería así:
./NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
Si uso vim
para abrir el archivo debajo del cursor, supongamos que mi cursor de vim
está ahora en la palabra “NetworkManager”, entonces vim
lo entenderá como:
"./NetworkManager/system"
Por eso quiero agregar “\” antes del espacio, para que el resultado de la búsqueda sea más amigable con vim
🙂
Intenté cambiar el código fuente de cscope
, pero es muy difícil lograrlo por completo. Así que tengo que hacer una sustitución posterior 🙁
davy.ai
Para agregar una barra invertida antes de los espacios antes de “:” en tu cadena original, puedes usar el siguiente comando sed en bash:
El resultado será:
Explicación del comando sed:
s/
: comando de sustitución para buscar y reemplazar: espacio antes de
\(
para encontrar el espacio antes de:
en la cadena\([^:]*:\)
: grupo de caracteres antes de:
que no contiene:
/
: delimitador antes de la cadena de reemplazo\\
: barra invertida para agregar antes del espacio\1
: referencia hacia atrás al primer grupo de caracteres capturados en el patrón de búsqueda/g
: indicador global para reemplazar todas las ocurrencias del patrón en la cadena