2012-03-12 90 views
1

我怎样才能使用grep命令txt坐在两个字符串之间的文本?Linux:我怎么能grep文本从字符串到字符串

例如:

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

在两个标签之间的“我需要文”是动态的,为此,我需要将从输出文本的命令“< --string 1 - >”到“ < --string 2 - >”关于维基

+0

将“我需要的文字”总是一行还是更多? – 2012-03-12 21:52:55

回答

0

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

一个更好的解决办法是:

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

你不能总是假设“我需要的文本”是一行 – 2014-08-25 14:00:06

1

,如果你知道,‘我需要’的文本始终是高于还是低于总串1或字符串2,你可以使用grep -A 1 "string 1" $file | tail -1

+0

工作!谢谢:) – 2012-03-12 21:49:33

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 
1

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

<--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,但它为我工作。