Фильтровать вывод команды по появлению определенного символа?
Так скажи, у меня есть команда, такая как ls
, И вывод большой, и я хочу отфильтровать его по количеству вхождений символа ':'. События не должны быть последовательными, они просто должны были бы происходить. Любая строка с десятью или более из этих вхождений должна быть отправлена на выход. Есть ли способ сделать это? Я думал о том, чтобы сделать скрипт на Python и сделать из него команду, как это, но я не был уверен, как я отформатирую сценарий, и что я мог и не мог сделать с точки зрения вывода по конвейеру от предыдущей команды в этот новый скрипт / команду.
3 ответа
Оболочка решение будет включать вызов awk
,
ls | awk -F: 'NF<9'
Это читает стандарт из ls
отправляет его в трубу, и awk
разбивает каждую строку на поля на основе :
, NF
среднее количество полей. когда NF
больше, чем 9
, запись будет напечатана.
Вы можете расширить это, чтобы отфильтровать любое число, передав переменную
ls | awk -F: -v minCnt=10 'NF<=minCnt`
IHTH
Использование расширенных регулярных выражений:
ls | egrep '(:.*){10,}'
Пример из man bash
, покажите все строки с 15 или более " е ", затем выделите их цветом:
COLUMNS=80 man bash | egrep --color '(e.*){15,}' | grep --color e
Выведите (цветная часть выделена жирным шрифтом):
более чем на 9 единиц, которые передаются по низким уровням
Вы можете читать со стандартного ввода, фильтровать и записывать в стандартный вывод:
# script.py
import sys
for line in sys.stdin:
if line.count(':') >= 10:
sys.stdout.write(line)
Вызов:
> ls | python script.py