如何获取字符串中子字符串最后一次出现之前的6个字符



给定以下形式的字符串:

variable = "info 1 keyword info 2 keyword info 3 789 info 4 keyword extra text..."

期望输出=";信息4";

我想在bash中编写一个命令,在给定关键字的情况下获取info4,获取该关键字最后一次出现之前的6个字符。我试过用grep和cut工具,但一直没能解决这个问题。

使用bash>=3.0和正则表达式:

[[ "$variable" =~ .*(.{6}) keyword ]] && echo "${BASH_REMATCH[1]}"

输出:

info4

bash正则表达式运算符的替代方案:

a=${variable% keyword*}
a=${a: -6}
echo "$a"

或者,在POSIX外壳中

a=${variable% keyword*}
a=${a#"${a%??????}"}
echo "$a"

两个版本都假定变量包含关键字。

使用-P选项的grep解决方案怎么样:

variable="info 1 keyword info 2 keyword info 3 789 info 4 keyword extra text..."
grep -Po '.{6}(?= keyword(?!.*keyword))' <<< "$variable"

输出:

info 4

正则表达式(?= keyword(?!.*keyword))是一个前瞻性断言,它与后面不再跟有keywordkeyword子字符串的开头相匹配。

最新更新