Бірнеше түстермен Grep шығу?

2 немесе одан да көп үлгілері бар мәтіндік файлға қарсы жүгіріп өтудің таңғажайып әдісі бар ма, және сәйкес келетін әрбір үлгі басқа түспен шығарылады?

Сондықтан MALE және AUGUST сәйкес келетін жол <�коды> MALE көк және AUGUST қызғылт сары түске боялады? Мен sed , awk , grep және қарындаштар немесе басқа ...

42
Сондай-ақ, жауаптарды stackoverflow.com/questions/981601/…
қосылды автор ndemou, көзі
colout бояғышты шешім ретінде пайдалы болуы мүмкін: nojhan.github.io/colout egrep 'MALE | АВГУСТ' file.txt | colale MALE көк | АВГУСТ сары түстері немесе мәтін ағыны сүзгілеудің қажеті болмаса, жай ғана оны бөлектеңіз, оны colout арқылы жасай аласыз MALE blue түстері
қосылды автор user2683246, көзі

9 жауаптар

Сіз әртүрлі түстермен циклды каскадтауға болады - қошқарды = әрқашан және барлық жолдарды өту үшін тұрақты фраза 'foo | $' өрнегін пайдалану арқылы белгілей аласыз.

Мысалға:

tail -f myfwlog | GREP_COLOR='01;36' egrep --color=always 'ssh|$' | GREP_COLOR='01;31' egrep -i --color=always 'drop|deny|$'

Барлық сызықтың бөлектелуін қаласаңыз, тиісті өрнекті жаңартыңыз:

.... GREP_COLOR='01;31' egrep -i --color=always '^.*drop.*$|^.*deny.*$|$'
47
қосылды
Толық жолды жаңарту үшін, regex-ді өзгерту - дұрыс емес тәсіл. Оның орнына GREP_COLORS = 'sl = 1, 31' grep ... сөзін пайдаланыңыз және барлық жолды түсі үшін слты көрсетіңіз.
қосылды автор William Pursell, көзі
соңғы шығыс жолдарын тек сөз салыстырылатын сызыққа қалай шектеуге болады? Ағымдағы команда барлық жолды басып шығарады, бірақ табылған сөзді түсіне алады. Шығарылымда нақты grep функциясын іздеймін.
қосылды автор mtk, көзі
GREP_COLORS параметрінде бірдей мәндер анықталса, бұл жұмыс істемейді ( S )) - бұны бұрын белгілемей көріңіз: $ GREP_COLORS = (< код> GREP_COLOR ескірген)
қосылды автор Volker Siegel, көзі

grep is a regular expression matcher, not a syntax highlighter :). You'll have to use multiple invocations of grep, using a different value of GREP_COLOR for each.

GREP_COLOR="1;32" grep foo file.txt | GREP_COLOR="1;36" grep bar

Бұл әр түрлі түстерде «foo» және «bar» екеуіне де сәйкес келетін сызықтармен ерекшеленеді. Екі тәуелсіз қоңыраудың шығу ағындарын біріктірудің қысқа мерзімінің біреуін немесе кез келген барлық көріністерін өңдеудің қарапайым тәсілі бар деп ойламаймын:

{ GREP_COLOR="1;32" grep foo file.txt
  GREP_COLOR="1;36" grep bar file.txt
} | ...

бұл әдеттегі әр өрнекте жеке түстерді тағайындаудың тәсілі болғанға қарағанда өзгеше болады.


awk функциясын пайдалана аласыз, әр матчты дұрыс басқару кодына орап алмастырыңыз.

 echo "foo bar" | awk '{ gsub("bar", "\033[1;33m&\033[0m");
                         gsub("foo", "\033[1;36m&\033[0m"); print }'

In each line, you globally replace anything matching the given regular expression with itself (&) wrapped in the ANSI escape sequences for desired color (which grep --color does for you). After processing all of the possible matches, you need to explicitly print the line.

26
қосылды

Егер сіз қораптан бір нәрсені қаласаңыз, сіз hhighlighter іздейміз.

Here's an example:JBoss output

Қара. Әр түрлі түстерде сөздерді бояуға өте пайдалы. Бұл аck сайтының үстіне салынған керемет жоба.

11
қосылды
h таңбалаушы - бұл ack командаларының құбырын автоматтандыратын және басқа grep негізіндегі жауаптармен жұмыс істейтін шағын Bash функциясы.
қосылды автор Dennis Williamson, көзі

Мәтіндік файлдардағы жолдарды бөліп көрсету керек болды, сондықтан менің қажеттіліктерімді қанағаттандыра алмады, сондықтан қарапайым өрнектерге сәйкес жолдарды бояуға арналған қарапайым C бағдарламасын жаздым.

Бастапқы кодты GitHub-тан жүктей аласыз:

git clone http://github.com/mbornet-hl/hl

содан кейін:

cd hl/cr; make

Мұнда пайдалану:

hl: version 1.21
Usage: hl [-h|-eidD][-E][-rgybmcwRGYBMCW] regexp ...
  -h : help
  -v : version
  -u : do not bufferize output on stdout
  -e : extended regular expressions
  -i : ignore case
  -E : print on stderr
  -r : red
  -g : green
  -y : yellow
  -b : blue
  -m : magenta
  -c : cyan
  -w : white
  -R : red     (reverse video)
  -G : green   (reverse video)
  -Y : yellow  (reverse video)
  -B : blue    (reverse video)
  -M : magenta (reverse video)
  -C : cyan    (reverse video)
  -W : white   (reverse video)
  -d : debug
  -D : display regular expressions

«Қызыл» сөзінің қызыл түске боялуы және көк түстің «көгілдір» сөзі үшін келесі пәрменді теру керек:

echo "red blue red blue" | hl -r red -b blue

және ifconfig пәрменінің шығысын бөлектеуге мысал:

hl -ei -m '^(eth|(vir)?br|vnet)[0-9.]*:[0-9]+\>'             \
       -b '^(eth|(vir)?br|vnet)[0-9.]*\.[0-9]+\>'            \
       -c '([0-9a-f]{2}:){5}[0-9a-f]{2}'                     \
       -g '\|\|([0-9]{1,3}\.){3}[0-9]{1,3}\>' \
       -y '^(eth|(vir)?br|vnet)[0-9.:]*\>'                   \
       -W '[0-9a-f]{4}::[0-9a-f]{4}\:[0-9a-f]{4}:[0-9a-f]{4}:[0-9a-f]{4}' \
       -r ' (errors|dropped|overruns):[^0][0-9]*'

Түстерді көрсететін тәртіп маңызды: егер жол бірнеше қалыпты өрнектерге сәйкес келсе, 1-і екіншіден жоғары басымдық, екіншісі - 3-ші орыннан жоғары басымдық және т.б.

Бұл үміт көмектеседі.

5
қосылды

Try the wonderful rpen http://github.com/rtulke/rpen

egrep немесе grep талап етеді

cp rpen.py/usr/local/bin/rpen chmod 777/usr/local/bin/rpen

содан кейін көріңіз

ps xau | rpen Ss «S +» «\? \?»

2
қосылды
Cygwin-де, мен орнатуды өте оңай деп таптым. Мен жұмыс істей алмадым. Пайдалану мысалы: $ cat ~/.bashrc | бүркеншік атпен экспорттау
қосылды автор Ellis, көзі

Мәселен, мұнда қолданған нұсқа (лар) бар. Айталық «FAILED» деген сөз қызыл түске боялатынын білдіреді, ол:

sed 's/\(ERROR\)/\o033[31m\1\o033[39m/'

«FAILED» сөзі бар қызыл жолмен белгіленген бүкіл сызықты

sed 's/\(.*ERROR.*\)/\o033[31m\1\o033[39m/'

Бірнеше сөзді қызыл деп белгілеу үшін:

sed 's/\(ERROR\|FAILED\)/\o033[31m\1\o033[39m/'

Бірнеше сөзді және қызыл түске боялған сызықтары бар:

sed 's/\(.*FAILED.*\|.*ERROR.*\)/\o033[31m\1\o033[39m/'

Бірнеше түстер болуы (ERROR = қызыл/FAILED = көк)

sed -e 's/\(ERROR\)/\o033[31m\1\o033[39m/' -e 's/\(FAILED\)/\o033[34m\1\o033[39m/'

Мұның бәрін ssh арқылы пайдалану үшін:

ssh [email protected] -t "tail -n 1024 -f /some/log/file | sed --unbuffered -e 's/\(.*ERROR.*\|.*FAILED.*\)/\o033[31m\1\o033[39m/' -e 's/\(.*postfix.*\|.*dhcpd.*\)/\o033[32m\1\o033[39m/'"

Оны әр уақытта терудің қажеті жоқ, оны bashrc-дағы функция ретінде жариялаңыз.

Басқа түстер үшін ANSI кодтары көрінеді.

1
қосылды

Бұл қалай? Оны тек қана МӨР мәрте жасай аласыз! Мұнда қияндар (1) сіз іздейтін сөздер/ЖӘНЕ/сөздерден; (2) жеткілікті үлкен сандармен (үлкенірек файлдың сызық есебі) болатын -A және -B опцияларын қолданасыз.

echo "you make it" > tmp
echo "you take it" >> tmp
echo "you cake it" >> tmp
echo "you bake it" >> tmp
echo "you wake it" >> tmp

GREP_COLOR='1;32' grep -P "(take|cake|bake)" --color=always tmp | GREP_COLOR='1;33' grep -P "(cake|bake)" --color=always -A10000 -B10000 | GREP_COLOR='1;34' grep -P "(bake)" --color=always -A10000 -B10000 
0
қосылды
'tail -f' -мен жұмыс істемейді
қосылды автор mtk, көзі

Менің жауап төмен:

tailf logfile awk '/MALE/' {print "\033[34m" $0 "\033[39m"}  '/MALE/' {print "\033[33m" $0 "\033[39m"}
0
қосылды

cxpgrep is right for this purpose - highlight patterns in different colors.

cxpgrep 'PAT1|PAT2|...' FILE_OR_DIRECTORY
0
қосылды