2013-03-28 30 views
2

之间的文字我已经提示历史文件:
SED得到线

[[email protected] path]# echo $first 
14556 
.... 
[[email protected] path]# echo $second 
65541 
.... 
[[email protected] path]# echo $first 
12345 
[[email protected] path]# command 
unknow number of rows 
[[email protected] path]# echo $second 
54321 
[[email protected] path]# 

$first$second是随机值,有一个文件很多。如何从文件末尾输出echo $firstecho $second之间的文本?即

[[email protected] path]# command 
unknow number of rows 
[[email protected] path]# echo $second 

看来我可以用

sed -n '/WORD1/,/WORD2/p' file 

,但我不知道该怎么写$第一和第二$代替WORD1和WORD2

那么我只需要得到(未知的行数)。要做到这一点,我将使用\

sed -e '1d' -e '$d' file 

回答

1

使用印刷的标志与awktac

$ tac file | awk '/\$first/{p=0;exit}p;/\$second/{p=1}' | tac 
12345 
[[email protected] path]# command 
unknow number of rows 

这的$first最后一次出现后的$second发生之前得到的线。

+0

它不工作 – Olga

+0

如果你彻底改变则要求明显我原来的答案不会*工作*。我编辑的答案不完全是你新的问题要求http://ideone.com/56nafq。 –

+0

对不起,但我只更改了[用户@主机路径]一词“bash”,并添加了更多的行,但正如我之前写的文件中有许多$ first和$ second – Olga

2

如果我的理解是正确的,你可以简单的写:

sed -n "/$first/, /$second/ p" file 

"允许的bash评估的变量,不像'

+1

你需要'sed -n'(禁止在处理后正常打印一行)而不是'sed'。 – Vatine

+0

该死的,我粘贴时忘记了。已经在回答中更正。谢谢你,先生! – Chirlo

+0

这不符合OP的需求。 –