【问题标题】:Extract a word between a pattern in linux在linux中的模式之间提取一个单词
【发布时间】:2013-10-06 12:15:28
【问题描述】:

我有一个包含多行的文件,我想提取-d-e 之间的单词,如果文件出现多次,第一个就可以了。

示例:

如果文件内容如下

someText -d wordToExtract -e someOtherWord and so on, -d Hello -e

我想提取第一次出现的wordToExtract

我尝试使用grepsed 命令但无法实现它,因为我是unix 的新手。任何帮助表示赞赏。

我试过的一个例子

grep -o -P '(?<=\\-d).*(?=\\-i)' fileName

【问题讨论】:

    标签: regex unix sed grep text-extraction


    【解决方案1】:

    这是您的输入文本:

    x='someText -d wordToExtract -e someOtherWord and so on, -d Hello -e'
    

    此 awk 将提取第一个匹配项:

    awk -F '-(d|e) *' '{print $2}' <<< "$x"
    wordToExtract
    

    这个 grep 应该可以提取 -d-e 之间的所有匹配字符串:

    grep -oP '\-d *\K(.*?)(?= *-e)' <<< "$x"
    wordToExtract
    Hello 
    

    【讨论】:

      【解决方案2】:

      试试下面的正则表达式:

      -d(.*?)-e
      

      显然转义是必要的,开关也是-o -P

      【讨论】:

        【解决方案3】:

        使用 的解决方案。我更喜欢 因为它有非贪婪的量词和 因为它可以避免每行多个匹配:

        perl -ne 'm/-d\s*(.*?)\s*-e/ && print "$1\n"' infile
        

        它产生:

        wordToExtract
        

        【讨论】:

          猜你喜欢
          • 2021-10-08
          • 1970-01-01
          • 2018-12-31
          • 2021-07-10
          • 2016-12-21
          • 1970-01-01
          • 2021-08-30
          • 1970-01-01
          相关资源
          最近更新 更多