Imprimer uniquement en correspondance des lignes de perl à partir de la ligne de commande
Je suis en train d'extraire toutes les adresses ip à partir d'un fichier. Jusqu'à présent, je suis juste en utilisant
cat foo.txt | perl -pe 's/.*?((\d{1,3}\.){3}\d{1,3}).*//'
mais cela permet également d'imprimer les lignes qui ne contiennent pas d'un match. Je peux résoudre ce problème par la tuyauterie à travers grep, mais cela semble comme il devrait être inutile, et pourrait conduire à des erreurs si les regexes ne correspondent pas parfaitement.
Est-il un moyen plus simple pour effectuer cette opération?
voulez-vous imprimer des lignes ou simplement les adresses ip?
OriginalL'auteur jonderry | 2011-02-24
Vous devez vous connecter pour publier un commentaire.
Si vous avez grep, puis il suffit d'appeler la commande grep directement:
La commande grep le fait que - c'est la
o
commutateur: afficher uniquement la partie d'une ligne de correspondance de MOTIF-P les Expressions Régulières de Perl (PCRE) -o Imprimer uniquement le contenu de la (non vide) des parties d'une correspondance de ligne, avec chaque partie sur une autre ligne de sortie
Mise en garde importante: pas toutes les versions de grep soutien
-P
. La version OS x est livré avec, en particulier, a brisé-P en 2013.OriginalL'auteur
Essayez ceci:
ou:
C'est le plus court alternative je pense bien que toujours à l'aide de Perl.
Cependant cette façon peut-être plus correct:
echo -n "$somevar"
avant de la pipe.OriginalL'auteur
Vous avez déjà une réponse appropriée de l'utilisation de grep pour extraire les adresses IP, mais juste pour expliquer pourquoi vous avez été voir des non-matchs imprimé:
perldoc perlrun
vais vous parler de toutes les options que vous pouvez passer Perl en ligne de commande.Citation de:
Vous pourriez avoir utilisé le
-n
passer à la place, ce qui n'est similaire, mais n'en fait pas automatiquement d'impression, par exemple:Aussi, il n'y a pas besoin d'utiliser
cat
; Perl va s'ouvrir et lire les noms de fichier que vous lui donner, alors on pourrait dire par exemple:OriginalL'auteur
OriginalL'auteur