读两个关键字之间的线

有人可以build议如果我必须阅读两个关键字之间做什么

*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文件的中间。

我会感谢你的更正。

这将为你工作:

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

您可以使用sed来简单地选择两个匹配行之间的文本,但是这也会包含匹配行本身…所以我们明确地删除这些行:

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

Awk也可以选择匹配行之间的文本:

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

…但像sed这将包括开始/结束终止。 你可以用awk解决这个问题,但是我认为你可以用sed获得一个更清晰的解决方案。

这是另外一个:

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

这可能适合你:

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

或这个:

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