读取两个关键字之间的行

时间:2012-02-16 16:58:17

标签: linux bash sed awk

如果我必须在

这两个关键字之间阅读,有人可以建议做什么
*System_Power
1
1.2
1.8
2
*System_Terminate

在这种情况下,asnwer将是

1
1.2
1.8
2

我尝试使用像

这样的awk
awk '$0 =="*System_Power"               #  start printing when 1st field is *System_Power
$0 != "*System_Terminate"{              #  until reach the  *System_Terminate
print;   } ' powerSummary > reportedFailure.k    # Read from file powerSummary and pipe to reportedFailure.k
exit

上面的数据位于文件powerSummary的中间位置。

我会感谢您的更正。

4 个答案:

答案 0 :(得分:5)

这对你有用:

$ awk '/\*System_Power/{f=1;next}/\*System_Terminate/{f=0}f' infile
1
1.2
1.8
2

答案 1 :(得分:2)

您可以使用sed轻松选择两个匹配行之间的文本,但这也包括匹配行本身...所以我们明确删除它们:

sed -n '/System_Power/,/System_Terminate/ { 
    /^\*/ d
    p
}' < input

Awk还可以选择匹配行之间的文字:

awk '/System_Power/,/System_Terminate/ {print}' < input

...但与sed类似,这将包括开始/结束终止符。您可以使用awk解决此问题,但我认为您可以使用sed获得更清晰的解决方案。

答案 2 :(得分:1)

这是另一个:

awk '$1=="*System_Power",$1=="*System_Terminate" {if (!/System*/) print}' in.txt

答案 3 :(得分:1)

这可能对您有用:

sed '/^\*System_Power/,/^\*System_Terminate/!d;//d' file

或者这个:

awk '/^\*System_Terminate/{p=0};p;/^\*System_Power/{p=1}' file