Скрипт для извлечения строк между двумя строками в Linux - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь написать небольшой скрипт, который позволит мне "захватывать орг" статьи из моей rss-reader (newsboat).Поэтому мой сценарий таков: я передам статью в сценарий;однако статья попадает в одну строку, например так:

Title: ABC boss quits over Australian political interference claims Author: Date: Thu, 27 Sep 2018 09:39:16 +0200 Link: https://www.bbc.co.uk/news/world-australia-45661871 The broadcaster's chair quits amid allegations the government leaned on him to dismiss two journalists.

Итак, мне нужно последовательно сохранить ссылку и заголовок в переменной, а затем вызвать команду с этими переменными (emacsclientпротокол org: / ...)

В общем, мне нужно это:

TITLE="ABC boss quits over Australian political interference claims"
URL="https://www.bbc.co.uk/news/world-australia-45661871"

Я подумал об использовании awk или sed, но они лучше всего работают для отдельных строк.Итак, я подумал, может быть, разделить одну строку в «Заголовок:», «Автор:», «Дата:» и «Ссылка:», а затем извлечь с помощью awk / sed.

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

Я на правильном пути?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Это может работать для вас (GNU sed):

sed -r 's/^Title: (.*) Author:.* Link: (\S+).*/TITLE="\1"\nURL="\2"/' file

Использовать сопоставление с шаблоном для извлечения обязательных полей.Первый может содержать пробелы, поэтому совпадайте по ключу Author:.Второй - это строка непробельных символов после клавиши Link:.

0 голосов
/ 27 сентября 2018

С помощью GNU awk для соответствия 3-го аргумента ():

$ cat tst.awk
match($0,/^Title:\s*(.*)\s+Author:\s*(.*)\s+Date:\s*(.*)\s+Link:\s*(\S+)\s+(.*)/,a) {
    printf "TITLE=\"%s\"\n", a[1]
    printf "URL=\"%s\"\n", a[4]
}

$ awk -f tst.awk file
TITLE="ABC boss quits over Australian political interference claims"
URL="https://www.bbc.co.uk/news/world-australia-45661871"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...