Удалить весь текст после месяца, года - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь создать список коротких описаний RF C, анализируя ietf RF C index . Я надеюсь, что какая-то команда с эффектом curl https://www.ietf.org/download/rfc-index.txt | sed 'magic' | awk 'more magic' | cut -f ?

непроверенный вывод команды curl https://www.ietf.org/download/rfc-index.txt выглядит так:

6708 Application-Layer Traffic Optimization (ALTO) Requirements. S.
      Kiesel, Ed., S. Previdi, M. Stiemerling, R. Woundy, Y. Yang.
      September 2012. (Format: TXT, HTML) (Status: INFORMATIONAL) (DOI:
      10.17487/RFC6708) 

6709 Design Considerations for Protocol Extensions. B. Carpenter, B.
     Aboba, Ed., S. Cheshire. September 2012. (Format: TXT, HTML)
     (Status: INFORMATIONAL) (DOI: 10.17487/RFC6709) 

6710 Simple Mail Transfer Protocol Extension for Message Transfer
     Priorities. A. Melnikov, K. Carlberg. August 2012. (Format: TXT,
     HTML) (Status: PROPOSED STANDARD) (DOI: 10.17487/RFC6710) 

6711 An IANA Registry for Level of Assurance (LoA) Profiles. L.
     Johansson. August 2012. (Format: TXT, HTML) (Status: INFORMATIONAL)
     (DOI: 10.17487/RFC6711) 

Я надеюсь получить результат, который прерывается от дополнительных заметок в Месяц Год :

6708 Application-Layer Traffic Optimization (ALTO) Requirements. S.
      Kiesel, Ed., S. Previdi, M. Stiemerling, R. Woundy, Y. Yang.

6709 Design Considerations for Protocol Extensions. B. Carpenter, B.
     Aboba, Ed., S. Cheshire.

6710 Simple Mail Transfer Protocol Extension for Message Transfer
     Priorities. A. Melnikov, K. Carlberg. 

6711 An IANA Registry for Level of Assurance (LoA) Profiles. L.
     Johansson.

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Используется команда sed:

sed -r 's/^(.*)(January|February|March|April|May|June|July|August|September|October|November|December) [[:digit:]]{4}(.*)$/\1/'

Просто трубка curl к нему.

Некоторые детали:

  • -r: использовать «Расширенные регулярные выражения»
  • Захватывать выходные данные до «$ month $ year» в первой группе (обозначается скобками)
  • Захватывать «$ month $ year» во второй группе.
  • Захват остальных в третьей группе.
  • Вывод только первой группы (\1)

Вот часть о sed от classi c серия по инструментам командной строки Брюса Барнетта.

1 голос
/ 19 апреля 2020

Если структура всех записей так же непротиворечива, как вы показываете, вам даже не нужно явно сопоставлять год или месяц, но вы можете полагаться на то, как все части, которые вы хотите удалить, разделены.

Следующая команда работает с вашим вводом:

sed -zE 's/[^.]+\.[ \n]+\([^)]+\)[ \n]+\([^)]+\)[ \n]+\([^)]+\)//g' yourfile

По сути, она соответствует последним (и единственным) трем парентезизированным текстам (\([^)]+\)) вместе со строкой, оканчивающейся последней точкой ([^.]+\.) что предшествует им. Это позволяет разделить эти три составляющие пробелами и / или символами новой строки ([ \n]+).

Кроме того, с опцией -z, sed обрабатывает входной файл как одну строку. -E означает использование + вместо \+ для обозначения 1 или более (ценой необходимости писать \( и \) для соответствия буквенным скобкам).

...