¿Qué hace el comando sed -e 's/\(~\).*\(~\)// en un archivo de texto?

¿Qué hace el comando sed -e 's/\(~\).*\(~\)// en un archivo de texto?

¿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 -etambié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.

información relacionada