有人可以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