2011-09-07 36 views
1

我有以下文件:UNIX提取多行

$cat somefile 
Line1 T:10 Hello 
    Var1 = value1 
    Var2 = value2 

Line2 T:2 Where 
    VarX1 = ValueX1 
    VarX2 = ValueX2 

Line3 T:10 AAAA 
    Var10 = Val1 
    Var11 = Val11 

Line4 T:10 ABCC 
    Var101 = Val110 

... 我需要的是通過給搜索條件,就應該得到多行。 例如,如果搜索條件是 - T:10 - 那麼它應該給

Line1 T:10 Hello 
    Var1 = value1 
    Var2 = value2 

Line3 T:10 AAAA 
    Var10 = Val1 
    Var11 = Val11 

我試過sed命令

sed -ne '/T:10/,/^$/p' somefile 

但這不能正常工作,它讓其他有時候也行。 有什麼我在這裏做錯了嗎?

+3

您的示例輸出是混淆了我。爲什麼您不認爲Line4 T:10將不會打印,因爲您的'/^$'/範圍匹配終止符?另外,如果您向我們展示您*確實獲得的輸出,它將有所幫助。最後,它適用於我,因爲我期望,給你的數據和sed腳本。祝你好運。 – shellter

回答

1

這是一個「段落」grep。 Linux/GNU grep沒有段落模式,我沒有在sed中完成,但是你可以使用perl。

perl -00 -ne 'print if /T:10/' somefile 
0

這裏有一個bash解決方案

#!/bin/bash 

data=$(<file) 
search="T:10" 
OLDIFS="$IFS" 
IFS="|" 
data=(${data//$'\n\n'/|}) 
for i in "${!data[@]}" 
do 
    case "${data[$i]}" in 
    *"${search}"*) echo "$i : ${data[$i]}" ;; 
    esac 
done 
IFS="$OLDIFS"