Unix извлечь несколько строк - PullRequest
       4

Unix извлечь несколько строк

2 голосов
/ 07 сентября 2011

У меня есть следующий файл:

$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 ]

1 голос
/ 07 сентября 2011

Это "параграф" grep. У grep в Linux / GNU нет режима абзаца, и я не делал этого в sed, но вы можете использовать perl.

perl -00 -ne 'print if /T:10/' somefile
0 голосов
/ 02 августа 2018

Это может работать для вас (GNU sed):

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

Отключить автоматическую печать с помощью параметра -n.Соберите строки между T:10 и пустой строкой и напечатайте их, иначе нет.

0 голосов
/ 08 сентября 2011

Вот решение 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"
...