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
vim
asívim '+g/^HERE IT IS/d' +wq test.txt
Respuestas:
Prueba
sed
:ADVERTENCIA: es mejor hacer una copia de seguridad cuando se usa el
-i
interruptor desed
:El archivo original permanecerá como
<file>.bak
y 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
grep
y lassed
respuestas que ha recibido, aquí hay algunas otras herramientas que pueden hacer lo mismo:Algunas formas de Perl:
Puede agregar el
-i
interruptor 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 predeterminadoawk
en 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
bash
me 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
grep
filtrarlos. Por ejemplo :Luego muévase de regreso al archivo.
fuente
sed
Definitivamente 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 IS
pitón
Guarde el script en un archivo, dígalo
script.py
y 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:
g
búsqueda globald
Eliminarx
guardar y cerrarfuente