Не уверен, что существует готовое -решение, но если вы немного знакомы с Python, вы можете попробовать ics.py . Просто pip install ics
, затем:
from ics import Calendar
md_template = """
### {start}
*{name}*: {desc}"""
with open("basic.ics") as f:
cal = Calendar(f.read())
print("## Calendar")
for e in sorted(cal.events):
print(md_template.format(start=e.begin.humanize(), name=e.name,
desc=e.description))
Каталоги не соответствуют шаблонам содержимого; файлы делают. Кажется, вы спрашиваете, как получить каталоги файлов, соответствующие шаблону.
Удалите путь после первого компонента и убедитесь, что результат представлен в виде уникальных значений в отсортированном порядке, как вы указали
grep -ril "hello" | sed 's!/.*$!!' | sort -u
Замените sort
на awk '!h[$0]++'
, если вы не хотите менять порядок результатов
Если вы хотите распечатать только каталог первого уровня, будет более эффективно выйти сразу после обнаружения первого совпадения в этом каталоге. Вы можете добиться этого, используя -q
, который возвращает успех для сопоставления, в противном случае сбой, и в сочетании с -r
он завершает работу сразу же, как только найдено совпадение.
for d in */; do grep -qri "hello" -- "$d" && printf "%s\n" "$d"; done
--
используется для обозначения конца параметров, поэтому все, что следует за аргументами файла, защищает от любого каталога с именем -something
и может интерпретироваться как параметр.
Если вы хотите, чтобы указанный выше for
соответствовал каталогам, начинающимся с .
, рассмотрите возможность установки shopt -s dotglob
, см. также это .
Если вам нужно удалить конечный /
из вывода, вы можете использовать расширение параметра bash и вместо "$d"
вывести "${d%/}"
.