shell 从一行中提取一个单词和其后的'n'个字符?

a0zr77ik  于 2022-11-16  发布在  Shell
关注(0)|答案(5)|浏览(214)

我正在尝试从字符串中提取JIRA票号。
Jira票可能在行中的任何位置被提及,例如:
1.来自配置变更/REL-12345的合并拉式请求#1387
1.释放度-12345:在配置级别启用XAPI
我只想将REL-12345作为输出。

wxclj1h5

wxclj1h51#

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-之后)。
5t7ly7z5

5t7ly7z52#

如果这是标准.....
输入:* 合并来自配置变更/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
aemubtdh

aemubtdh3#

您可以将String传递给sed,并使用REGEX进行替换,如下所示:

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

这将返回:REL-12345

pdkcd3nj

pdkcd3nj4#

示例数据:

$ 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 "\n########## ${line}\n"
    [[ "${line}" =~ ${regex} ]] && echo "${BASH_REMATCH[1]}"
done < jira.dat

这会产生:

REL-12345
REL-12346
yhxst69z

yhxst69z5#

示例数据:

$ 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

相关问题