¿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

Jaffer Wilson
fuente

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
Zanna
fuente
26

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

grep "\."  file > newfile

De esa manera puede guardar su archivo anterior.

Fl.pf.
fuente
10

O mantenga las líneas que contienen un punto ,

sed -ni.bak '/\./p' infile
αғsнιη
fuente
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.

fedorqui
fuente
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
abligh
fuente
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\.

James
fuente