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 en utilisant les commandes du terminal Ubuntu?
Voici le fichier exemple pour référence: exemple de données
com.blendtuts/S
°=
com.blengineering.www/:http
±=
Je veux avoir la sortie:
com.blendtuts/S
com.blengineering.www/:http
Les lignes indésirables supplémentaires n'ont pas de point. Par conséquent, je veux supprimer les lignes sans points
One way avec sed
sed '/\./!d' file
/\./
correspond à un point littéral (échappé avec \
car sinon .
correspond à n'importe quel caractère)!d
efface tout sauf le motif correspondantSi vous souhaitez modifier le fichier à la place, ajoutez -i
à la commande après le test. (Vous pouvez également ajouter .bak
à l'indicateur -i
pour sed -i.bak ...
afin de créer une sauvegarde locale du fichier.)
sed -i '/\./!d' file
Vous pouvez tout grep avec un point dans un nouveau fichier:
grep "\." file > newfile
De cette façon, vous pourrez sauvegarder votre ancien fichier.
Ou gardez les lignes qui contiennent un point,
sed -ni.bak '/\./p' infile
Je pense que awk
est le dernier manquant pour le parti:
$ 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.
Vous pouvez le faire assez facilement avec vim. Si vous maîtrisez bien utiliser vim en tant qu'éditeur de texte (ouverture, édition 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 le modifier pour enregistrer dans un nouveau fichier:
vim file -c "g!/\./d" -c "w newfile" -c "q!"
Ceci utilise la commande "globale" de vim, qui applique une commande ex à chaque ligne correspondant (ou non) à une expression régulière. Dans ce cas, la commande est "(d) elete" et sera appliquée à toutes les commandes ne correspondant pas à l'expression régulière \.
Utiliser Perl:
Perl -i -ne 'print if /\./' /path/to/file