Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取2字符串之间的任何字符串,并在bash中分配一个变量_Bash - Fatal编程技术网

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

获取2字符串之间的任何字符串,并在bash中分配一个变量,bash,Bash,我不能让它工作。我只想在bash中获得另外两个对象之间的字符串。像这样: FOUND=$(echo "If show <start>THIS WORK<end> then it work" | **the magic**) echo $FOUND FOUND=$(echo“如果显示此工作,那么它工作”|**魔术**) 找到echo$ 看起来很简单…sed-n的/*\(.*\)./\1/p' sed -n 's/.*<start>\(.*\)<end&

我不能让它工作。我只想在bash中获得另外两个对象之间的字符串。像这样:

FOUND=$(echo "If show <start>THIS WORK<end> then it work" | **the magic**)
echo $FOUND
FOUND=$(echo“如果显示此工作,那么它工作”|**魔术**)
找到echo$
看起来很简单…

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

如果您的字符串中有,那么这将起作用。将
FS
设置为

[jaypal:~/Temp]FOUND=$(echo“如果显示此工作,则它工作”|
awk-v FS=“[]”“{print$3}”)
找到[jaypal:~/Temp]echo$
这项工作

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

data="If show <start>THIS WORK<end> then it work"
regex="<start>(.*)<end>"
[[ $data =~ $regex ]] && found="${BASH_REMATCH[1]}"
echo $found
data=“如果显示此工作,则它工作”
regex=“(*)”
[[$data=~$regex]]&&found=“${BASH\u重新匹配[1]}”
找到echo$
这也可以在grep中使用perl正则表达式来完成(特定于GNU):

found=$(grep-Po'(?您的字符串中有和吗?或者那是供我们参考的?如果没有,那么您的实际字符串和所需的输出是什么?更多的信息肯定会有所帮助!@JaypalSingh和是一个参考。可以是任何文本:)$found只显示“此工作”
data="If show <start>THIS WORK<end> then it work"
regex="<start>(.*)<end>"
[[ $data =~ $regex ]] && found="${BASH_REMATCH[1]}"
echo $found
found=$(grep -Po '(?<=<start>).*(?=<end>)' <<< "If show <start>THIS WORK<end> then it work")
echo "$found"