如何使用位于两个字符串之间的grep命令txt来获取文本?
例如:
<--string 1-->
the text i need
<--string 2-->
两个标签之间的“我需要的文字”是动态的,因此我需要一个从“&lt; - string 1 - &gt;”输出文字的命令到“&lt; - string 2 - &gt;”
答案 0 :(得分:1)
如果你知道“我需要的文字”总是高于或总是低于字符串1或字符串2,你可以使用grep -A 1 "string 1" $file | tail -1
或grep -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