¿Cómo eliminar las líneas de un archivo que no contiene punto?


10

Tengo un archivo que contiene datos, incluidas las URL. Pero hay varias líneas que no son URL. ¿Cómo puedo eliminarlos usando los comandos de terminal de Ubuntu?

Aquí está el archivo de muestra para referencia: Datos de muestra

com.blendtuts/S
°=
com.blengineering.www/:http
±=

Quiero tener la salida:

com.blendtuts/S
com.blengineering.www/:http

Las líneas adicionales no deseadas no tienen ningún punto. Por lo tanto, quiero eliminar las líneas sin puntos

Respuestas:


30

Unidireccional con sed

sed '/\./!d' file
  • /\./match literal dot (escapado con \porque de lo contrario .coincide con cualquier carácter)
  • !d eliminar todo excepto el patrón coincidente

Si desea editar el archivo en su lugar, agréguelo -ial comando después de la prueba. (También puede agregar .baka la -ibandera sed -i.bak ...para crear una copia de seguridad local del archivo).

sed -i '/\./!d' file

26

Podrías grep todo con un punto en un nuevo archivo:

grep "\."  file > newfile

De esa manera puede guardar su archivo anterior.


10

O mantenga las líneas que contienen un punto ,

sed -ni.bak '/\./p' infile

8

Creo que awkes el último que falta a la fiesta:

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

Esto establece el separador de campo en el punto. Luego, se trata de imprimir aquellas líneas que tienen al menos dos campos: esto significa que se produce al menos un punto.


3
Una solución awk más simple sería hacerlo en la misma línea que grep: awk '/\./' filees decir, imprimir solo las líneas que contienen el carácter '.'.
Chris Midgley

@ChrisMidgley buena! Como esta es la respuesta que grepya sugerí, preferí ir con algunas awkcosas específicas :)
fedorqui

6

Usando perl:

perl -i -ne 'print if /\./' /path/to/file

6

Puedes hacerlo fácilmente con vim. Si se siente cómodo usando vim como editor de texto (abrir, editar y escribir archivos), haga esto:

:g!/\./d

Si no se siente cómodo usando vim, o prefiere usarlo como una herramienta de línea de comandos, simplemente puede hacerlo desde la terminal:

vim file -c "g!/\./d" -c "wq"

Puede modificar esto ligeramente para guardarlo en un nuevo archivo:

vim file -c "g!/\./d" -c "w newfile" -c "q!"

Utiliza el comando "global" de vim, que aplica un comando ex a cada línea que coincide (o no coincide) con una expresión regular. En este caso, el comando es "(d) elete", y se aplicará a cada comando que no coincida con la expresión regular\.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.