en bash, si je veux exécuter une commande et afficher uniquement les lignes de sortie qui correspondent à un certain modèle, je peux le diriger vers grep
, comme
fichier test de fichier
hello
there
my
friends
commander
$ cat testfile | grep 'hello'
hello #this will be highlightd
cela mettra en évidence la correspondance de recherche et affichera toute la ligne sur laquelle elle se trouve. Je peux utiliser -A
et -B
pour afficher les lignes avant et après cette ligne. Ma question est la suivante: est-il possible d'exécuter la commande et d'afficher toutes les sorties normalement, mais de mettre en évidence les correspondances de recherche comme le ferait grep? donc ma sortie serait
hello #highlighted
there
my
friends
linux
command-line
bash
grep
ewok
la source
la source
Réponses:
Pour utiliser un GREP couleur pour ne mettre en surbrillance que les motifs correspondants mais pas autrement changer la sortie:
Le premier motif correspondra à toutes les lignes (toutes les lignes seront imprimées), le second motif (et tous les motifs suivants) feront surligner en couleur le texte correspondant.
Étant donné que le premier motif correspond à toutes les lignes mais ne correspond pas à un caractère imprimable, il n'ajoute aucune surbrillance de couleur afin de ne pas concurrencer / interférer avec la lisibilité du texte mis en surbrillance.
la source
kubectl apply -k . | grep --color=always -e "^" -e "configured"
dans zsh"^"
doit être le second).Ajoutez une option
-z
à votre commande GNU grep:ou plus court
la source
grep --color "hello\|$" file
De la même manière que pour la réponse précédente, vous pouvez attraper toutes les
$
extrémités des lignes:-E
(ou--extended-regexp
) signifie que les caractères spéciaux doivent être échappés avec\
. Lors de son utilisation,|
sera traité comme une condition regex "OU".Grep
|$
capturera et imprimera également toutes les lignes qui ont une fin, mais comme $ est un caractère caché, il ne peut pas être mis en surbrillance.Mise à jour:
Si vous souhaitez imprimer toutes les sorties, mais aussi retourner le code de sortie , qu'une correspondance ait été trouvée ou non, vous pouvez utiliser la commande perl:
Si vous préférez sed - Voici un exemple pour mettre en surbrillance toutes les correspondances + retourner le code de sortie si aucune correspondance n'a été trouvée: https://askubuntu.com/a/1200851/670392
la source
Celui-ci fonctionne avec GNU grep ainsi qu'avec grep sur FreeBSD:
Il correspond au texte "bonjour" ou (
\|
) à la chaîne nulle non imprimable à la fin de chaque ligne ($
). C'est pourquoi chaque ligne est imprimée mais seul "bonjour" est mis en surbrillance.Vous avez probablement déjà
--color=auto
configuré dans votre shell. Vous n'avez alors probablement pas besoin de spécifier--color=always
:Vous pouvez également une version plus simple en utilisant
egrep
(avec des expressions régulières étendues), où|
l'expression "ou" n'a pas besoin d'être échappée:la source
Ajout à la première réponse ci-dessus. La fonction de surbrillance {} mentionnée dans les commentaires ne fonctionne que lorsque des données y sont acheminées. L'alias suivant, bien qu'il ne soit pas parfait, est plus utile:
Cela fonctionne avec des commandes telles que:
la source