w bashu, jeśli chcę wykonać polecenie i wyświetlić tylko linie wyjściowe, które pasują do określonego wzorca, mogę go potokować grep
, jak
plik testowy pliku
hello
there
my
friends
Komenda
$ cat testfile | grep 'hello'
hello #this will be highlightd
to podświetli dopasowanie wyszukiwania i wyświetli całą linię, na którą spadnie. Mogę używać -A
i -B
do wyświetlania linii przed i po tej linii. Moje pytanie brzmi: czy możliwe jest wykonanie polecenia i wyświetlenie wszystkich danych wyjściowych w normalny sposób, ale czy podświetlić pasujące wyniki wyszukiwania, tak jak grep? więc moje wyjście byłoby
hello #highlighted
there
my
friends
linux
command-line
bash
grep
ewok
źródło
źródło
Odpowiedzi:
Aby użyć GREP koloru, aby podświetlić tylko pasujące wzory, ale nie zmieniać w inny sposób wyniku:
Pierwszy wzór będzie pasował do wszystkich linii (wszystkie linie zostaną wydrukowane), a drugi wzór (i dowolne kolejne wzory) spowoduje, że dopasowany tekst zostanie wyróżniony kolorem.
Ponieważ pierwszy wzór pasuje do wszystkich linii, ale nie pasuje do znaku drukowalnego, nie dodaje żadnego podświetlenia kolorów, więc nie konkuruje / nie zakłóca czytelności podświetlonego tekstu.
źródło
kubectl apply -k . | grep --color=always -e "^" -e "configured"
w zsh"^"
musi być drugi).Dodaj opcję
-z
do polecenia GNU grep:lub krócej
źródło
grep --color "hello\|$" file
Podobnie jak w poprzedniej odpowiedzi, możesz złapać wszystkie
$
końce linii:-E
(lub--extended-regexp
) oznacza, że znaki specjalne muszą być poprzedzone znakiem ucieczki\
. Podczas jego używania|
będzie traktowany jako wyrażenie regularne „LUB”.Grep
|$
będzie również łapał i drukował wszystkie linie, które mają koniec, ale ponieważ $ jest ukrytym znakiem, nie można go wyróżnić.Aktualizacja:
Jeśli chcesz wydrukować wszystkie dane wyjściowe, ale także zwrócić kod wyjścia , niezależnie od tego, czy znaleziono dopasowanie, możesz użyć polecenia perl:
Jeśli wolisz sed - oto przykład, jak wyróżnić wszystkie dopasowania + zwrócić kod wyjścia, jeśli nie znaleziono dopasowania: https://askubuntu.com/a/1200851/670392
źródło
Ten działa zarówno z GNU grep, jak i grep na FreeBSD:
Odpowiada tekstowi „hello” lub (
\|
) nie drukowalnego ciągu zerowego na końcu każdej linii ($
). Dlatego każda linia jest drukowana, ale podświetlone jest tylko „cześć”.Możliwe, że już
--color=auto
skonfigurowałeś swoją powłokę. Wtedy najprawdopodobniej nie musisz określać--color=always
:Możesz także uprościć wersję, używając
egrep
(z rozszerzonymi wyrażeniami regularnymi), gdzie|
dla wyrażenia „lub” nie trzeba wstawiać znaku ucieczki:źródło
Dodanie do górnej odpowiedzi powyżej. Wspomniana w komentarzach funkcja wyróżnienia {} działa tylko wtedy, gdy przesyłane są do niej dane. Poniższy alias, choć nie idealny, jest bardziej użyteczny:
Działa to z poleceniami takimi jak:
źródło