如何在 bash 脚本中使用 sed 从字符串中解析 "CM-220" 之类的子字符串
How to parse a substring like "CM-220" from a string using sed in a bash script
我有一个字符串
blah\n blah\n blah Refs: CM-220
我知道我可以像下面这样使用 sed 提取 CM-220
echo 'blah\n blah\n blah Refs: CM-220' | sed 's/.*Refs: \([^ ]*\).*//'
但我想更严格地将其提取为alphabet + "-" + number。
我不太擅长正则表达式。
谁能帮帮我或者提供一些我可以参考的链接?非常感谢!
您可以将此 sed
与 ERE
模式一起使用,即 -E
选项:
echo 'blah\n blah\n blah Refs: CM-220' |
sed -E 's/.*Refs: ([[:alpha:]]+-[[:digit:]]+).*//'
CM-220
[[:alpha:]]+-[[:digit:]]+
是您所需模式的翻译:alphabet + "-" + number
其中 [[:alpha:]]+
匹配 1 个或多个字母字符,[[:digit:]]+
匹配 1 个或多个数字。
如果您要匹配的字符串存储在 shell 变量中,您可以使用 bash
的内置正则表达式来完成,而不必执行 sed
或另一个外部程序:
#!/usr/bin/env bash
str="blah
blah
blah Refs: CM-220"
re="Refs: ([[:alpha:]]+-[[:digit:]]+)"
if [[ $str =~ $re ]]; then
printf "Found: %s\n" "${BASH_REMATCH[1]}"
fi
我有一个字符串
blah\n blah\n blah Refs: CM-220
我知道我可以像下面这样使用 sed 提取 CM-220
echo 'blah\n blah\n blah Refs: CM-220' | sed 's/.*Refs: \([^ ]*\).*//'
但我想更严格地将其提取为alphabet + "-" + number。 我不太擅长正则表达式。
谁能帮帮我或者提供一些我可以参考的链接?非常感谢!
您可以将此 sed
与 ERE
模式一起使用,即 -E
选项:
echo 'blah\n blah\n blah Refs: CM-220' |
sed -E 's/.*Refs: ([[:alpha:]]+-[[:digit:]]+).*//'
CM-220
[[:alpha:]]+-[[:digit:]]+
是您所需模式的翻译:alphabet + "-" + number
其中 [[:alpha:]]+
匹配 1 个或多个字母字符,[[:digit:]]+
匹配 1 个或多个数字。
如果您要匹配的字符串存储在 shell 变量中,您可以使用 bash
的内置正则表达式来完成,而不必执行 sed
或另一个外部程序:
#!/usr/bin/env bash
str="blah
blah
blah Refs: CM-220"
re="Refs: ([[:alpha:]]+-[[:digit:]]+)"
if [[ $str =~ $re ]]; then
printf "Found: %s\n" "${BASH_REMATCH[1]}"
fi