在 Bash 中有没有办法从一行中提取一个单词和它后面的 n 个字符?
In Bash is there a way to extract a word and n characters after it from a line?
我正在尝试从字符串中提取 JIRA 票证编号。
Jira 票证可能会在行中的任何位置提及,例如:
合并拉取请求 #1387 来自 Config-change/REL-12345
REL-12345:在配置级别启用 XAPI
我只想要 REL-12345 作为输出。
有人可以帮忙吗。谢谢!
如果这是标准......
输入:合并来自 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
您可以将字符串传递给 sed
并使用 REGEX 进行替换,如下所示:
myString="This is REL-12345 a test string "
sed -n 's/.*\(\REL-5*[0-9]*\).*//p' <<< $myString
这应该 return: REL-12345
示例数据:
$ 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
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-
之后)。
示例数据:
$ 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
我正在尝试从字符串中提取 JIRA 票证编号。
Jira 票证可能会在行中的任何位置提及,例如:
合并拉取请求 #1387 来自 Config-change/REL-12345
REL-12345:在配置级别启用 XAPI
我只想要 REL-12345 作为输出。
有人可以帮忙吗。谢谢!
如果这是标准......
输入:合并来自 Config-change/REL-12345
的拉取请求 #1387echo "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
您可以将字符串传递给 sed
并使用 REGEX 进行替换,如下所示:
myString="This is REL-12345 a test string "
sed -n 's/.*\(\REL-5*[0-9]*\).*//p' <<< $myString
这应该 return: REL-12345
示例数据:
$ 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
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-
之后)。
示例数据:
$ 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