Linux:我如何从字符串到字符串grep文本

时间:2012-03-12 21:34:09

标签: linux bash grep

如何使用位于两个字符串之间的grep命令txt来获取文本?

例如:

<--string 1-->
the text i need
<--string 2-->

两个标签之间的“我需要的文字”是动态的,因此我需要一个从“&lt; - string 1 - &gt;”输出文字的命令到“&lt; - string 2 - &gt;”

6 个答案:

答案 0 :(得分:1)

如果你知道“我需要的文字”总是高于或总是低于字符串1或字符串2,你可以使用grep -A 1 "string 1" $file | tail -1grep -B 1 "string 2" $file | head -1

答案 1 :(得分:1)

我们需要知道string1和string2的行号是什么 我们可以使用grep -n 然后使用头部和尾部,我们可以得到string1和string2之间的线 例如:

<--string 1-->
the text i need
<--string 2-->


start=$(cat file | grep -n <--string 1--> | grep -Eo [0-9]+)
finish=$cat file | grep -n <--string 2-->) | grep -Eo [0-9]+)
res=$((finish-start))
result=$(cat file | head -$start | tail -$res)

有点hacky,但它对我有用。

答案 2 :(得分:0)

假设“我需要的文本”只是一行,你应该检查string1和string2是否出现(Alex的解决方案只检查一件事)。

更好的解决方案是:

grep -A 2 "string 1" $file | tail -2 | grep -B 1 "string 2" | head -1

答案 3 :(得分:0)

这可能对您有用:

grep -A2 "<--string 1-->" file | grep -v "<--string 1-->\|<--string 2-->"

grep -A1 "<--string 1-->" file | grep -v "<--string 1-->"

或在一个过程中:

sed '/<--string 1-->/,/<--string 2-->/!d;//d' file

或:

awk '/<--string 2-->/{p=0};p;/<--string 1-->/{p=1}' file

答案 4 :(得分:0)

希望对您有帮助。

DATA=$(cat /tmp/file)
STARTVAR=$(echo "$DATA" | grep -n '<--string 1-->' | grep -Eo [0-9]+)
ENDVAR=$(echo "$DATA" | grep -n '<--string 2-->' | grep -Eo [0-9]+)
CALC=$((($ENDVAR - $STARTVAR) - 1))
result=$(echo "$DATA" | grep -A $CALC '<--string 1-->')
echo "$result"

如果要在输出中包含CALC=$((($ENDVAR - $STARTVAR) - 1)),请用CALC=$(($ENDVAR - $STARTVAR))替换'<--string 2-->'

答案 5 :(得分:-1)

grep word filename

检查wiki上的grep .. http://en.wikipedia.org/wiki/Grep