Sed : imprimer toutes les lignes après match
J'ai eu mon résultat de recherches après l'utilisation de sed
:
zcat file* | sed -e 's/.*text=\(.*\)status=[^/]*//' | cut -f 1 - | grep "pattern"
Mais il ne montre que la partie que j'ai coupé. Comment puis-je imprimer toutes les lignes après un match ?
Je suis en utilisant zcat donc je ne peut pas utiliser awk.
Grâce.
Édité :
C'est mon fichier de log :
[01/09/2015 00:00:47] INFO=54646486432154646 from=steve idfrom=55516654455457 to=jone idto=5552045646464 guid=100021623456461451463 n
um=6 text=hi my number is 0 811 22 1/12 status=new survstatus=new
Mon but est de trouver tous les utilisateurs qui spam mon site avec leurs numéros de téléphone (à l'aide de grep "pattern"
) puis imprimer toutes les lignes pour obtenir toutes les informations au sujet de chaque spam. Le problème est que il peut y avoir des matches dans l'INFO ou de l'id, donc j'utilise sed
pour obtenir le texte premier.
Pouvez-vous montrer un exemple de sortie de
"Je suis en utilisant zcat donc je ne peut pas utiliser awk." Attendez, quoi?
Il est pas encore clair quel sortie exactement que vous essayez d'obtenir.
Que diriez-vous nous avez dit plus précisément ce que votre fichier journal est (comme, si ce n'est que la seule ligne que vous avez collé, vous n'avez pas besoin de sed, vous n'avez pas à faire tout cela, mais nous donner de plus), et ce que vous attendez. Avec des mots et avec un exemple. Personne ne peut lire dans votre esprit.
Je pense que JB signifie que la sortie de
zcat
de votre sortie?"Je suis en utilisant zcat donc je ne peut pas utiliser awk." Attendez, quoi?
Il est pas encore clair quel sortie exactement que vous essayez d'obtenir.
Que diriez-vous nous avez dit plus précisément ce que votre fichier journal est (comme, si ce n'est que la seule ligne que vous avez collé, vous n'avez pas besoin de sed, vous n'avez pas à faire tout cela, mais nous donner de plus), et ce que vous attendez. Avec des mots et avec un exemple. Personne ne peut lire dans votre esprit.
Je pense que JB signifie que la sortie de
zcat
est juste de texte standard, de sorte que vous pourriez transférer à awk
pas de problème.OriginalL'auteur brest1007 | 2015-09-14
Vous devez vous connecter pour publier un commentaire.
C'est peut-être ce que vous voulez vraiment? Trouver les lignes correspondant à "pattern" et extraire le champ après
text=
en place par juste avantstatus=
?Vous n'êtes pas révéler ce que les
pattern
fait est, si c'est une variable, vous ne pouvez pas utiliser les guillemets simples autour d'elle.Avis que
\(.*\)status=[^/]*
pourrait répondre par le biais desurvstatus=new
dans votre exemple. Ce n'est probablement pas ce que vous voulez? Il ne semble pas être unstatus=
suivi d'une barre oblique n'importe où -- vous devriez vraiment expliquer plus en détail ce que vous êtes en train d'essayer d'accomplir.Votre question titre dit "tous les après un match" donc, vous voulez peut-être tout ce qui est après
text=
? Alors que c'est tout simplementc'est à dire remplacer par
text=
avec rien, et garder le reste. (J'ai confiance, vous pouvez comprendre comment modifier les environs de script danszcat file* | sed '/pattern/s/.*text=//'
... oups, peut-être que ma confiance a échoué.)En fait, vous voulez probablement
... | sed -n '/.../s/.../.../p'
pour imprimer uniquement l'extrait lignes. C'est facile à faire avec Awk; ne savez pas pourquoi vous pensez que vous ne pouvez pas utiliser Awk pour cela.OriginalL'auteur tripleee
L'impression de toutes les lignes après un match en
sed
:Filtrage des lignes lorsque le motif correspond entre "texte=" et "status=" qui peut être fait avec un simple
grep
, pas besoin desed
etcut
:Chaque ligne après /pattern/.
J'ai édité ma question, j'ai essayé ta solution, mais elle correspond aussi à l'INFO ou de l'id déposée si cela ne fonctionne toujours pas.
Les travaux de cette. N'oubliez pas le
-n
d'autre imprimer tout peu importe.OriginalL'auteur JB.
alternativement, vous pouvez utiliser
awk
peut-être peut se combiner avec toutes les opérations précédentes, dans awk.
OriginalL'auteur karakfa
La que rarement utilisée, direction de la commande va le faire pour vous. Jusqu'à ce que vous match, utiliser n pour next puis direction vers le début. Après le match, l'utilisation n de sauter la correspondance de ligne, puis une boucle de copier les lignes restantes.
cat
est inutile.OriginalL'auteur user2398449
au lieu de changer les 2 derniers segments de votre pipeline de sorte que:
OriginalL'auteur Elbert Hannah