LINUX.ORG.RU

Выбрать из текста текст между оговоренными строками

 , , , ,


0

1

Нет, это не экзамеционная задача, просто мне приходится парсить лог одной программы.

В чём суть вопроса, допустим, наши оговоренные строки — это:

AAA---AAA

и

BBB---BBB
, тогда текст

00000
11111
AAA---AAA
22222
BBB---BBB
33333
44444
55555
AAA---AAA
66666
77777
88888
BBB---BBB
99999

должен превратиться в

22222
66666
77777
88888

То есть все между A и B оставить, все между B и A убрать, как и сами эти A и B.

★★★★★

Последнее исправление: Vsevolod-linuxoid (всего исправлений: 2)

Подскажу:

while (<>) {...
rupert ★★★★★
()

Не увидел самого вопроса, только суть.

Языки из тегов мне малознакомы, поэтому в качестве подсказки:

start = "AAA---AAA"
end = "BBB---BBB"

"some.log"
|> File.read!() 
|> String.split("\n") 
|> Enum.reduce(false, fn line, fit? ->
  cond do
    line == start -> true
    line == end -> false
    fit? -> IO.puts(line) && fit?
    true -> fit?
  end
end)

ddidwyll ★★★★
()
$ perl -ne 'print if (/AAA---AAA/.../BBB---BBB/) !~ /^1|E0|^$/' test.txt
22222
66666
77777
88888
pru-mike ★★
()
... | sed -r '/^AAA---AAA$/,/^BBB---BBB$/ ! d; /^(AAA---AAA|BBB---BBB)$/ d'

22222
66666
77777
88888
spirit ★★★★★
()
... | awk '/^AAA---AAA$/{ do_print = 1; next; }  /^BBB---BBB$/{ do_print = 0; }  (do_print){ print; }'

22222
66666
77777
88888
spirit ★★★★★
()
awk '/^AAA---AAA$|^BBB---BBB$/ {ss=($0~/^AAA---AAA$/); next}
     ss==1 { print }'
vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.