Comment supprimer les lignes d'un fichier qui ne contiennent pas de point?

10

J'ai un fichier qui contient des données, y compris des URL. Mais il existe différentes lignes qui ne sont pas des URL. Comment puis-je les supprimer à l'aide des commandes du terminal Ubuntu?

Voici l'exemple de fichier pour référence: Sample Data

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

Je veux avoir la sortie:

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

Les lignes supplémentaires indésirables n'ont pas de point. Par conséquent, je veux supprimer les lignes sans points

Jaffer Wilson
la source

Réponses:

30

Une façon avec sed

sed '/\./!d' file
  • /\./correspond au point littéral (échappé avec \car .correspond à n'importe quel caractère)
  • !d supprimer tout sauf le motif correspondant

Si vous souhaitez modifier le fichier sur place, ajoutez-le -ià la commande après le test. (Vous pouvez également ajouter .bakà l' -iindicateur sed -i.bak ...pour créer une sauvegarde locale du fichier.)

sed -i '/\./!d' file
Zanna
la source
26

Vous pouvez tout grep avec un point dans un nouveau fichier:

grep "\."  file > newfile

De cette façon, vous pouvez enregistrer votre ancien fichier.

Fl.pf.
la source
10

Ou gardez les lignes qui contiennent un point ,

sed -ni.bak '/\./p' infile
αғsнιη
la source
8

Je pense awkque ce dernier manque à la fête:

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

Cela définit le séparateur de champ sur le point. Ensuite, il s'agit d'imprimer les lignes qui ont au moins deux champs: cela signifie qu'au moins un point apparaît.

fedorqui
la source
3
Une solution awk plus simple serait de le faire dans la même veine que grep: awk '/\./' file- c'est-à-dire, d'imprimer uniquement les lignes contenant le caractère '.'.
Chris Midgley
@ChrisMidgley good one! Puisque c'est ce que la réponse a grepdéjà suggéré, j'ai préféré aller avec des awktrucs spécifiques :)
fedorqui
6

Utilisation de perl:

perl -i -ne 'print if /\./' /path/to/file
abligh
la source
6

Vous pouvez le faire assez facilement avec vim. Si vous êtes à l'aise d'utiliser vim comme éditeur de texte (ouverture, modification et écriture de fichiers), procédez comme suit:

:g!/\./d

Si vous n'êtes pas à l'aise avec vim, ou si vous préférez l'utiliser comme outil de ligne de commande, vous pouvez simplement le faire depuis le terminal:

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

Vous pouvez légèrement modifier cela pour enregistrer dans un nouveau fichier:

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

Cela utilise la commande "globale" de vim, qui applique une commande ex à chaque ligne correspondant (ou ne correspondant pas) à une expression régulière. Dans ce cas, la commande est "(d) elete", et elle sera appliquée à chaque commande ne correspondant pas à l'expression régulière\.

James
la source