Je trouve que grep
le --color=always
drapeau de 'est extrêmement utile. Cependant, grep imprime uniquement les lignes avec des correspondances (sauf si vous demandez des lignes de contexte). Étant donné que chaque ligne imprimée a une correspondance, la mise en évidence n'ajoute pas autant de fonctionnalités qu'elle le pourrait.
J'aimerais vraiment cat
un fichier et voir le fichier entier avec les correspondances de motifs en surbrillance.
Existe-t-il un moyen de dire à grep d'imprimer chaque ligne en cours de lecture, qu'il y ait ou non une correspondance? Je sais que je pourrais écrire un script pour exécuter grep sur chaque ligne d'un fichier, mais j'étais curieux de savoir si cela était possible avec la norme grep
.
sed
. lased
solution vous offre plusieurs couleurs au prix d'une complexité supplémentaire (au lieu d'environ 30 caractères, vous avez environ 60 caractères).Réponses:
Voici quelques façons de procéder:
la source
egrep --color "pattern|" file
(credit stackoverflow.com/a/7398092/50979 )egrep --color "pattern1|pattern2|$"
. Sinon, la surbrillance des couleurs ne se produit pas.Voici quelque chose dans le même sens. Il y a de fortes chances que vous utilisiez moins de toute façon, alors essayez ceci:
Il mettra en surbrillance le motif et passera à la première occurrence de celui-ci dans le fichier.
la source
-
:… | less -p pattern -
-i
option rendra la casse de correspondance insensible comme dansless -ip pattern file
.less
l'-R
interrupteur:… | less -Rip introduction -
J'aimerais recommander ack - mieux que grep, un outil de recherche de puissance pour les programmeurs .
Je l'adore car il utilise par défaut la recherche récursive de répertoires (et est beaucoup plus intelligent que
grep -r
), prend en charge les expressions régulières Perl complètes (plutôt que POSIXishregex(3)
) et a un affichage de contexte beaucoup plus agréable lors de la recherche de nombreux fichiers.la source
ack
est intelligent, mais parfois trop intelligent, et il excluait le type de fichier dans lequel le hit était.ack -a
recherchera tous les types de fichiers, tout en excluant.git/
.svn/
etc.ack
ne cherche pas dans mes images, en-a
fait trop. J'ai ajouté--type-set=freemarker=.ftl
à mon~/.ackrc
, pour donner un exemple.Vous pouvez utiliser mon
highlight
script sur https://github.com/kepkin/dev-shell-essentialsC'est mieux que
grep
parce que vous pouvez mettre en évidence chaque match avec sa propre couleur .source
grep
, qui est un utilitaire standard sur les machines exécutant * nix.colout
mentionné dans une autre réponse.colout
, ce qui est bien si vous voulez inspecter ce qu'il fait.Vous pouvez également créer un alias. Ajoutez cette fonction dans votre .bashrc (ou .bash_profile sur osx)
Vous pouvez maintenant utiliser l'alias comme ceci: "
ifconfig | grepe inet
" ou "grepe css index.html
".(PS: n'oubliez pas
source ~/.bashrc
de recharger bashrc sur la session en cours)source
--color=always
au lieu de--color
less
interpréter les codes couleurs, utilisezless -R
.Utilisez le
colout
programme: http://nojhan.github.io/colout/Il est conçu pour ajouter des reflets de couleur à un flux de texte. Étant donné une expression régulière et une couleur (par exemple "rouge"), il reproduit un flux de texte avec des correspondances mises en évidence. par exemple:
Vous pouvez chaîner plusieurs invocations pour ajouter plusieurs surbrillances de couleurs différentes:
Ou vous pouvez obtenir la même chose en utilisant une expression régulière avec N groupes (parties entre parenthèses de l'expression régulière), suivie d'une liste séparée par des virgules de N couleurs.
la source
grep
- delà , et il est déjà développé dans les réponses,colout
c'est la meilleure solution au problème que vous avez eu, la meilleure que je sache. Selon la philosophie UNIX, les programmes doivent être écrits pour bien faire une chose. Cargrep
il filtre le flux de texte. Carcolout
c'est coloriser ou surligner le flux de texte.colout
c'est un outil très utile. Apprenez-le une fois, utilisez-le dans de nombreuses situations, plutôt que d'apprendre un outil pour mettre en évidence les fichiers journaux, un autre pour mettre en surbrillance les résultats des tests, etc.J'utilise rcg de "Linux Server Hacks", O'Reilly. Il est parfait pour ce que vous voulez et peut mettre en évidence plusieurs expressions chacune avec des couleurs différentes.
la source
L'
-z
option pour grep est également assez lisse!la source
J'ai ajouté ceci à mes .bash_aliases:
la source
Pour mettre en surbrillance des motifs lors de la visualisation de l'ensemble du fichier, h peut le faire.
De plus, il utilise différentes couleurs pour différents motifs.
Vous pouvez également diriger la sortie de
h
versless -R
pour une meilleure lecture.Pour grep et utiliser 1 couleur pour chaque motif, cxpgrep pourrait être un bon ajustement.
la source
Ok, c'est une façon,
vous donnera le nombre de lignes - dites NN, alors vous pouvez faire
la source
Voici un script shell qui utilise la fonction gsub d'Awk pour remplacer le texte que vous recherchez par la séquence d'échappement appropriée pour l'afficher en rouge vif:
Utilisez-le comme ceci:
Malheureusement, il n'a pas toutes les fonctionnalités de grep.
Pour plus d'informations, vous pouvez vous référer à un article " So You Like Color " dans Linux Journal
la source
Une autre réponse mentionne le commutateur -Cn de grep qui comprend n lignes de contexte. Je fais parfois cela avec n = 99 comme un moyen rapide et sale d'obtenir [au moins] un écran plein de contexte lorsque le modèle egrep semble trop compliqué, ou lorsque je suis sur une machine sur laquelle je n'ai pas installé rcg et / ou ccze.
J'ai récemment découvert
ccze
qui est un colorant plus puissant. Mon seul reproche, c'est qu'il est orienté écran (commeless
, que je n'utilise jamais pour cette raison), sauf si vous spécifiez le commutateur -A pour la sortie "raw ANSI".+1 pour la
rcg
mention ci-dessus. C'est toujours mon préféré car il est si simple à personnaliser dans un alias. Quelque chose comme ça se trouve généralement dans mon ~ / .bashrc:alias tailc = 'tail -f / my / app / log / file | rcg envoyer "BOLD GREEN" recevoir "CYAN" error "RED" '
la source
une autre façon sale:
J'ai fait un
à bashrc.
la source
Vous pouvez également utiliser The Silver Searcher et faire
la source
Si vous souhaitez mettre en évidence plusieurs motifs avec des couleurs différentes, voyez ceci script bash.
Utilisation de base:
Vous pouvez modifier les motifs et les couleurs tout en exécutant en appuyant sur une touche, puis sur la touche Entrée.
la source
J'utilise la commande suivante à des fins similaires:
grep -C 100 searchtext file
Cela indiquera grep pour imprimer 100 * 2 lignes de contexte, avant et après le texte de recherche en surbrillance.
la source
Voici mon approche , inspirée de la solution de @ kepkin:
Cela accepte plusieurs arguments (mais ne vous permet pas de personnaliser les couleurs). Exemple:
la source
L'option
-C999
fera l'affaire en l'absence d'une option pour afficher toutes les lignes de contexte. La plupart des autres variantes de grep le supportent également. Cependant: 1) aucune sortie n'est produite lorsqu'aucune correspondance n'est trouvée et 2) cette option a un impact négatif sur l'efficacité de grep: lorsque la-C
valeur est grande, de nombreuses lignes peuvent devoir être temporairement stockées en mémoire pour grep afin de déterminer quelles lignes de contexte à afficher lorsqu'une correspondance se produit. Notez que les implémentations grep ne chargent pas les fichiers d'entrée mais lisent plutôt quelques lignes ou utilisent une fenêtre glissante sur l'entrée. La "partie avant" du contexte doit être conservée dans une fenêtre (mémoire) pour sortir les lignes de contexte "avant" plus tard lorsqu'une correspondance est trouvée.Un motif tel que
^|PATTERN
ouPATTERN|$
ou n'importe quel sous-motif de correspondance vide pour cette question comme[^ -~]?|PATTERN
est une bonne astuce. Cependant, 1) ces modèles ne montrent pas de lignes non correspondantes mises en évidence comme contexte et 2) cela ne peut pas être utilisé en combinaison avec d'autres options grep, telles que-F
et-w
par exemple.Donc, aucune de ces approches ne me satisfait. J'utilise ugrep et grep amélioré avec option
-y
pour afficher efficacement toutes les sorties non correspondantes sous forme de lignes de contexte surlignées en couleur. D'autres outils de type grep tels que ag et ripgrep offrent également une option d'intercommunication. Mais ugrep est compatible avec GNU / BSD grep et offre un sur-ensemble d'options grep comme-y
et-Q
. Par exemple, voici ce que l'option-y
affiche lorsqu'elle est combinée avec-Q
(interface utilisateur de requête interactive pour saisir des modèles):la source