Фильтровать вывод команды по появлению определенного символа?

Так скажи, у меня есть команда, такая как 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
Другие вопросы по тегам