¿Qué le hace el comando sed -e 's/\(~\).*\(~\)//
a un archivo de texto? No lo entiendo. Lo encontré en mi trabajo.
Respuesta1
El comando (si agrega una comilla simple que falta al final) imprimirá todas las líneas del archivo en la terminal, pero si hay al menos dos ~
caracteres (tilde) en cualquier línea, entonces el bit entre el primero y el último ~
se imprimirá. eliminarse mediante un comando de sustitución ( s
) en sed
.
Ejemplo:
$ cat file
1 2 3 ~ 4
1~2~3
Here is ~ the last ~ line ~ THE END
$ sed -e 's/\(~\).*\(~\)//' file
1 2 3 ~ 4
13
Here is THE END
\(
Sin embargo , y no \)
son necesarios (ya que no se utilizan referencias anteriores en la expresión), y -e
también se pueden omitir (ya que solo hay una expresión), por lo que el comando es equivalente a
sed 's/~.*~//' file
Entonces, nohacernada al archivo en sí, pero leerá y modificará el contenido del archivo, produciendo un texto procesado que luego podrá guardar en un nuevo archivo con una redirección ( sed ... >newfile
).
Una referencia retrospectivapodríausarse en este comando, así:
sed 's/\(~\).*\1//' file
Es decir, hacer coincidir un ~
, luego algún otro texto y luego lo mismo que hicimos coincidir en el primer \(...\)
grupo (una tilde). Pero esto no evita tener que escribir ni hace que el comando sea más fácil de mantener o comprender, por lo que no supondría ninguna mejora sed 's/~.*~//' file
.