代码之家  ›  专栏  ›  技术社区  ›  mor3dr3ad

在linux中提取两个字符串之间的字符串的脚本

  •  1
  • mor3dr3ad  · 技术社区  · 6 年前

    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 protocol:/…)

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

    我在这里发现了类似的用例和问题,但并不完全相同。我想要一个非常简单的脚本,而不必使用python。

    我走对了吗?

    谢谢你的帮助。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Ed Morton    6 年前

    第三个参数要匹配的GNU awk():

    $ 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"
    

    我还演示了如何保存所有其他字段,以便您还可以对输入执行任何其他需要执行的操作。

        2
  •  1
  •   potong    6 年前

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

    使用模式匹配来提取所需的字段。第一个可以包含空格,以便与键匹配 Author: . 第二个是键后面的一个非空格字符字符串 Link: .