Я обычно использую grep
для поиска шаблона в строке. Однако в этом конкретном случае я должен идентифицировать заголовок YAML, также он заканчивается тройной чертой.
Мой файл test.info имеет следующий контент
---
title: dont't know
draft: true
---
this is a test to add some extra content
Я хочу , чтобы следующий вывод, то есть все , от после в последней YAML разделителя до конца файла:
this is a test to add some extra content
Когда я вхожу в тире, bash возвращает следующую ошибку:
$ cat test.info | grep '---' -A1
grep: unrecognized option `---'
Я безуспешно пытался «сбежать» от черточек. Любая идея? Это для BSD grep. Меня смущает то, что я могу получить то, что хочу, если сделаю что-то вроде следующего.
$ cat test.info | grep 'this' -A1
Проблема в том, что я не знаю, какое первое слово.
Я могу выполнить поиск файла в соответствии с рекомендациями, но инструмент возвращает шаблон, а не все сразу после:
$ grep -m 1 -e '---' test.info
---
$ grep -- --- test.info | tail -1
---
tac
команды наtail -r
Необходимо добавить соответствующую проверку ошибок, как в
if $line 'not numeric' ...
Первоначальная проблема связана с тем, что вам нужно сбежать
-
или сказать программе, что это не вариант:Большая часть (?) Программного обеспечения GNU имеет «-» в качестве опции; говорит прекратить анализ для получения дополнительных опций после этого момента.
Примечание.
$ grep --version
Должно указывать, является ли это утилита GNU grep или нет.
$ grep -h
или
$ grep --help
обычно говорит варианты, которые он понимает.
источник
$ echo - | grep -P '\x2d'
соответствует его черту.Использование awk:
RS
определяет в---
качестве разделителя записей и сEND{print}
мы только печатает последнюю запись.Используя sed:
источник
Я вижу как минимум два разных способа сделать это. На самом деле вам нужно убежать от первого "-"
Используя опцию -e:
Выход из первого "-" с обратной косой чертой:
источник
Так что, не принимая кредиты, как я не хочу, я просто публикую решение, которое работало на моем Mac благодаря KasiyA
источник
Обращаясь к одному аспекту вашего (теперь оригинального) вопроса.
(И ваши новые вопросы по-прежнему говорят о grep и -A1 и делают вид, что вы не можете найти способ указать 3 дефиса, и это просто неправильно, потому что в ваших комментариях вы показали, что можете).
[ваш оригинальный вопрос спрашивал, как показать результаты ОТ точки. когда на самом деле вы хотите ОТ ПОСЛЕ. В вашем новом вопросе все еще говорится «от», я обновил его до «от после»
Если похоже, что grep и -A1 - это не то, что вам нужно, хотя это все еще упоминается даже в вашем обновленном вопросе
Я не вижу смешных результатов. Возможно, вы можете вставить результаты, которые вы считаете смешными. [теперь у вас есть]
Если вы выполните grep pattern -A1, то он выдает шаблон, за которым следует следующая строка. И это сбрасывает
--
после каждого матча.например
Вы можете выполнить grep -P '(? = ---) ...' -A1 Еще одна вещь, которую вы можете попробовать, это grep -P '\ x2d {3}' -A1
И если ваш файл имеет ---
Конечно, это не работает
$ cat t3.info | grep -P '---' -A1 grep: нераспознанная опция '---' Использование: grep [ОПЦИЯ] ... ШАБЛОН [ФАЙЛ] ... Попробуйте 'grep --help' для получения дополнительной информации.
Но это работает
и это работает
grep версия 2.16
Если вы не хотите включать ваш шаблон, тогда какой бы вариант вы не использовали, он не будет -A1, и я не понимаю, почему у вас возникают проблемы с соответствием ---
Может случиться так, что для того, чтобы делать то, что вы хотите, с помощью grep или чего-то подобного grep, вам нужно сопоставить новую строку с регулярным выражением egeg в положительном lookbehind .. для --- \ n, но, очевидно, grep не может сопоставить новые строки, в этом случае вы можете повезет больше с pcregrep https://stackoverflow.com/questions/2686147/how-to-find-patterns-across-multiple-lines-using-grep или другим способом. Еще один вопрос, как вы можете сопоставить то, что следует на линии после паттерна.
источник
cat t3.info | grep -P '(?=\x2d{3})...' -A1
илиcat t3.info | grep -P '\x2d\x2d\x2d' -A1
--- title: dont't know -- --- this is a test to add some extra content
---
том, чтобы быть особой проблемой. И ваш вопрос может быть больше о: а) сопоставлении текста вне пары тегов. Или б) сопоставлении текста после второго появления шаблона.