我无法让这个工作。我只想在bash中获得2个其他人之间的字符串。像这样:
FOUND=$(echo "If show <start>THIS WORK<end> then it work" | **the magic**)
echo $FOUND
看起来很简单......
答案 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