
Есть ли команда, которая выделяет определенное выражение в тексте?
Я ищу что-то вроде функции «поиска» в less, но с обычным выводом текста на stdout, а не в средство less
просмотра.
Пример:
$ cat test.txt | highlight "an"
Перспективы дляаорганизованный вывод войск НАТО из Афганистанааистапотерпели две неудачи, когда президент Хамид Карзай демократавведенные ограничения на войска Соединенных Штатоваг Талибаостановил мирные переговоры.
Он может использовать цвет или любые другие средства для выделения указанного регулярного выражения.
решение1
Не уверен, связано ли это с какой-то особенностью или это просто какой-то скрытый побочный эффект, но это работает в GNU grep
2.11:
grep --color 'an\|' test.txt
решение2
аккесть --passthru
опция, которая сделает это:
ack --passthru an test.txt
some_command | ack --passthru an -
решение3
Вы можете попробовать этот мой скрипт. Он позволит вам указать файл или использовать стандартный ввод. Вы можете определить регулярное выражение Python для текста, который вы хотите выделить. выделенный текст по умолчанию имеет неоново-зеленый цвет (эй, я использую черный фон!) Но вы можете изменитьЦветовой код ANSI.
#!/usr/bin/env python
import sys
import re
def highlight_text(text,pat):
def replacement_funk(matchobj): return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
return re.sub(pat,replacement_funk,text)
if __name__ == '__main__':
if len(sys.argv) == 2:
input = sys.stdin
pat = sys.argv[1]
elif len(sys.argv) == 3:
input = open(sys.argv[2])
pat = sys.argv[1]
else:
sys.stderr.write("colorme pattern [inputfile]")
text = input.read()
print highlight_text(text,pat)
Вотапример.
blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an
Перспективы дляаорганизованный вывод войск НАТО из Афганистанааистапотерпели две неудачи, когда президент Хамид Карзай демократавведенные ограничения на войска Соединенных Штатоваг Талибаостановил мирные переговоры.
blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt
Перспективы упорядоченногоНАТОвыход изАфганистанпотерпели две неудачи: президент Хамид Карзай потребовал ограничить присутствие войск США, а Талибан прекратил мирные переговоры.
решение4
$cat test.txt | grep --colour=auto -C 100000 an
"color" тоже работает. Вы также можете определить псевдоним, чтобы grep всегда использовал опцию:
alias grep='grep --colour=auto -C 100000'
Поместите указанное выше в /etc/profile.d/ или в ваш .bashrc или куда-нибудь еще.