En un archivo con muchas líneas, quiero eliminar las líneas que comienzan con HERE IT IS.
¿Cómo puedo hacer esto usando solo herramientas de línea de comandos?
command-line
text-processing
micgeronimo
fuente
fuente

vimasívim '+g/^HERE IT IS/d' +wq test.txtRespuestas:
Prueba
sed:ADVERTENCIA: es mejor hacer una copia de seguridad cuando se usa el
-iinterruptor desed:El archivo original permanecerá como
<file>.baky el archivo modificado será<file>.fuente
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>sed '/^HERE IT IS/G' file.Además de los muy buenos
grepy lassedrespuestas que ha recibido, aquí hay algunas otras herramientas que pueden hacer lo mismo:Algunas formas de Perl:
Puede agregar el
-iinterruptor a cualquiera de los ejemplos para editar el archivo en su lugar:(papar moscas
Las versiones más recientes (4.1.1 y posteriores) de GNU
awk(el valor predeterminadoawken Linux) también pueden editar el archivo en su lugar:Shell (
bash,zsh,ksh, y probablemente otros). Sin embargo, esto es un poco tonto, se puede hacer, pero otras herramientas son mejores.fuente
bashme hizo LOL)printf "%s\n" "$line": citando $ line para preservar espacios en blanco y evitando algunos problemas de eco (interpretación de caracteres especiales, etc.). y evita la necesidad de agregar--también.IFS=y-r, también podría ir hasta el final y hacerlo robusto.Solía
grepfiltrarlos. Por ejemplo :Luego muévase de regreso al archivo.
fuente
sedDefinitivamente es el camino a seguir.Esta ligera modificación del comando que le dio @heemayl eliminará la línea, ya sea que se use el mismo caso en el patrón o no, debido a la I en la referencia del patrón.
Si tenía varios archivos en un directorio en el que deseaba hacer esto, podría combinarlo con buscar así.
La opción maxdepth significa que esto no se repetirá en los directorios.
fuente
Otra opción de python:
Donde f es la ruta al archivo, entre comillas.
fuente
Grep
(?!HERE IT IS)aserción negativa anticipada que hace que el motor de expresiones regulares coincida con todos los límites de inicio de línea ( que generalmente coinciden^) solo si no es seguido por la cadenaHERE IT ISpitón
Guarde el script en un archivo, dígalo
script.pyy luego ejecútelo a través del siguiente comando en el terminal.fuente
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)], pero no es mucho más eficiente questartswith. Me preguntaba cómo[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]no produciría la salida en una lista.Puede usar Vim en modo Ex:
gbúsqueda globaldEliminarxguardar y cerrarfuente