unix提取多行

时间:2011-09-07 17:40:16

标签: sed

我有以下文件:

$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 个答案:

答案 0 :(得分:1)

这是一个“段落”grep。 Linux / GNU grep没有段落模式,我没有在sed中完成它,但你可以使用perl。

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

答案 1 :(得分: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"

答案 2 :(得分:0)

这可能对您有用(GNU sed):

sed -n '/T:10/{:a;N;/^$/M!ba;p}' file

使用-n选项关闭自动打印。聚集T:10和空行之间的行,否则打印不行。