2013-03-28 31 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的需求。 –