LINUX.ORG.RU

Выборка строк из файла между символами ? &


0

1

Добрый день, подскажите пожалуйста как сделать выборку строк из файла.

Файл примерно с таким содержимым


b?s= text1 b&s ...... b?s= text2 b&s ...... b?s= text3 b&s ...... b?s= text4 b&s ...... b?s= text5 b&s ...... b?s= text6 b&s ......
....................................
b?s= text7 b&s
....................................
b?s= text8 b&s
....................................
....................................
....................................
b?s= text9 b&s
....................................

Как получить содержимое между ....b?s и b&s......

Что бы вывод получился

text1
text2
text3
text4
text5
text6
text7
text8
text9



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

#!/bin/bash

function data()
{
cat <<EOF
b?s= text1 b&s ...... b?s= text2 b&s ...... b?s= text3 b&s ...... b?s= text4 b&s ...... b?s= text5 b&s ...... b?s= text6 b&s ......
....................................
b?s= text7 b&s
....................................
b?s= text8 b&s
....................................
....................................
....................................
b?s= text9 b&s
....................................
EOF
}

data |
sed 's/b&s/b\&s\n/g' |
sed -n 's/.*b?s= \(.*\) b&s.*/\1/p'
anonymous
()
grep -oE '\?[^&]*&' | awk '{print $2}'
sdio ★★★★★
()
Ответ на: комментарий от anonymous

В этом файле много текста и символов !@#$%^&*()<>
Строки беспорядочны

Точно известно что нужный текст всегда начинается значением ?start потом идет случайный набор букв и цифр, заканчивается все &end

?start нужный текст &end

Делал так
cat file |
sed 's/&end/\&end\n/g' |
sed -n 's/.*?start \(.*\) &end.*/\1/p'

Вывод пустой
Что делаю не так ?

ANGELOS
() автор топика
Ответ на: комментарий от ANGELOS
  • сокращай до минимального нерабочего теста
  • проверяй вывод каждого sed
  • не найдешь проблему - выкладывай минимальный нерабочий тест с искаженными, важными для тебя, данными
anonymous
()
Ответ на: комментарий от anonymous

Большое спасибо всем за помощь!!!

Особенно выражаю благодарность анонимному пользователю за данный код, очень помог!!

#!/bin/bash

function data()
{
cat <<EOF
b?s= text1 b&s ...... b?s= text2 b&s ...... b?s= text3 b&s ...... b?s= text4 b&s ...... b?s= text5 b&s ...... b?s= text6 b&s ......
....................................
b?s= text7 b&s
....................................
b?s= text8 b&s
....................................
....................................
....................................
b?s= text9 b&s
....................................
EOF
}

data |
sed 's/b&s/b\&s\n/g' |
sed -n 's/.*b?s= \(.*\) b&s.*/\1/p'

ANGELOS
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.