La mejor herramienta para la edición de archivos in situ no interactiva es ex
.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Si ha usado vi
y si alguna vez ha escrito un comando que comienza con dos puntos :
, ha usado un comando ex. Por supuesto, muchos de los comandos más avanzados o "sofisticados" que puede ejecutar de esta manera son extensiones de Vim (p :bufdo
. Ej. ) Y no están definidos en las especificaciones POSIXex
, pero esas especificaciones permiten un grado realmente sorprendente de potencia y flexibilidad en aplicaciones no visuales. edición de texto (ya sea interactivo o automatizado).
El comando anterior tiene varias partes.
-s
habilita el modo silencioso para prepararse ex
para el uso por lotes. (Suprimir mensajes de salida et. Al.)
-c
especifica el comando que se ejecutará una vez que el archivo ( file.txt
en este caso) se abra en un búfer.
%
es un especificador de dirección equivalente a: 1,$
significa que el siguiente comando se aplica a todas las líneas del búfer.
s
es el comando sustituto con el que probablemente ya estés familiarizado. Se usa comúnmente vi
y tiene características esencialmente idénticas al s
comando desed
, aunque algunas de las características avanzadas de expresiones regulares pueden variar según la implementación. En este caso, desde ".com" hasta el final de la línea se reemplaza con solo ".com".
La barra vertical separa los comandos secuenciales que se ejecutarán. En muchas (la mayoría) de las ex
implementaciones, también puede usar una -c
opción adicional , como esta:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Sin embargo, esto no es requerido por POSIX.
El x
comando sale, después de escribir cualquier cambio en el archivo. A diferencia de lo wq
que significa "escribir y salir", x
solo escribe en el archivo si el búfer ha sido editado. Por lo tanto, si su archivo no se modifica, la marca de tiempo se conservará.
.com
solo en lugar de eliminar todo después e incluir el primer/
carácter? ¿Y si tuviera una URL comoen.wikipedia.org/wiki/Ubuntu
en su lista?