【问题标题】:In Bash is there a way to extract a word and n characters after it from a line?在 Bash 中,有没有办法从一行中提取一个单词和 n 个字符?
【发布时间】:2022-10-19 21:51:22
【问题描述】:

我正在尝试从字符串中提取 JIRA 票证号。

Jira 票证可能会在该行中的任何位置被提及,例如:

  1. 合并来自 Config-change/ 的拉取请求 #1387REL-12345

  2. REL-12345: 在配置级别启用 XAPI

    我只是想REL-12345作为输出。

    有人可以帮忙吗。谢谢!

【问题讨论】:

  • REL 是您要查找的关键字吗?或者你想要任何匹配 3 个字母一个破折号和 5 个数字的模式?
  • N个字符?你想匹配REL-364REL-357465吗?你怎么知道你所有的票都是5位数的?您根本不关心旧票吗?似乎比匹配“n 个字符”更容易匹配 [0-9]+
  • 嗨,Mat,REL 是我想要找到的模式。谢谢
  • 嗨,威廉,此自动化仅适用于新打开的 JIRA 票证。因此,不需要 4 位数的旧票。谢谢。

标签: bash shell


【解决方案1】:
grep -Eow 'REL-[0-9]+'

+ 是一个或多个,指定 N 个数字(例如 5):

grep -Eow 'REL-[0-9]{5}
  • 范围:{3,6} 为 3 到 6,{5,} 为 5 或更多,等等。
  • 在 GNU/Linux 上:man grep -> /Repetition 了解更多详情。
  • -o 只打印匹配的字符串
  • -w 仅匹配完整的单词,即。避免匹配WREL-12345(例如)
  • grep -Eow 'REL-[[:alnum:]]+' 用于字母和数字(在REL- 之后)。

【讨论】:

    【解决方案2】:

    如果这是标准......

    输入:合并来自 Config-change/REL-12345 的拉取请求 #1387

    echo "Merge pull request #1387 from Config-change/REL-12345" | cut -d/ -f2
    

    输入:REL-12345:在配置级别启用 XAPI

     echo "REL-12345: Enable XAPI at config level" | cut -d: -f1
    

    【讨论】:

      【解决方案3】:

      您可以将字符串传递给sed 并使用正则表达式进行替换,如下所示:

      myString="This is REL-12345 a test string "
      sed -n 's/.*(REL-5*[0-9]*).*//p' <<< $myString
      

      这应该返回:REL-12345

      【讨论】:

        【解决方案4】:

        样本数据:

        $ cat jira.dat
        Merge pull request #1387 from Config-change/REL-12345
        REL-12346: Enable XAPI at config level
        

        使用bash 正则表达式匹配和结果BASH_REMATCH[] 的一个想法:

        regex='(REL-[[:digit:]]+)'
        
        while read -r line
        do
            printf "
        ########## ${line}
        "
            [[ "${line}" =~ ${regex} ]] && echo "${BASH_REMATCH[1]}"
        done < jira.dat
        

        这会产生:

        REL-12345
        REL-12346
        

        【讨论】:

          【解决方案5】:

          样本数据:

          $ cat jira.dat
          Merge pull request #1387 from Config-change/REL-12345
          REL-12346: Enable XAPI at config level
          

          使用grep 的一个想法:

          $ grep -Eo 'REL-[[:digit:]]+' jira.dat
          REL-12345
          REL-12346
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-12
            • 1970-01-01
            • 2016-09-10
            • 1970-01-01
            相关资源
            最近更新 更多