获取2个字符串之间的任何字符串并在bash中分配变量

时间:2011-12-19 23:26:26

标签: bash

我无法让这个工作。我只想在bash中获得2个其他人之间的字符串。像这样:

FOUND=$(echo "If show <start>THIS WORK<end> then it work" | **the magic**)
echo $FOUND

看起来很简单......

3 个答案:

答案 0 :(得分:4)

sed -n 's/.*<start>\(.*\)<end>.*/\1/p'

答案 1 :(得分:3)

这可以在没有任何外部命令(如awk和sed)的bash中完成。在bash中进行正则表达式匹配时,匹配的结果将被放入一个名为BASH_REMATCH的特殊数组中。此数组的第二个元素包含第一个捕获组的匹配。

data="If show <start>THIS WORK<end> then it work"
regex="<start>(.*)<end>"
[[ $data =~ $regex ]] && found="${BASH_REMATCH[1]}"
echo $found

这也可以使用grep中的perl regex(特定于GNU)来完成:

found=$(grep -Po '(?<=<start>).*(?=<end>)' <<< "If show <start>THIS WORK<end> then it work")
echo "$found"

答案 2 :(得分:0)

如果你有&lt;开始&gt;和&lt;结束&gt;在你的字符串中然后这将工作。将FS设置为<>

[jaypal:~/Temp] FOUND=$(echo "If show <start>THIS WORK<end> then it work" | 
awk -v FS="[<>]" '{print $3}')
[jaypal:~/Temp] echo $FOUND
THIS WORK