LINUX.ORG.RU

Копирование определенных строк из файла через консольные команды линукс с использованием bash файла

 ,


0

1

Всем привет. Подсобите советом. У меня возникло затруднение с следующей задачей: у меня есть файл из строками, скажем, например, файл hello.txt, и в нем строки: 213441dsfaas 1234123adfs raz 123431435 1543fadf raz. Суть в чем. raz - это метки, мне нужно что бы копировались строки начиная из самого верхнего raz и выше. Я использовал grep, и он копирует все что выше всех меток, то есть все будет скопированно, а мне необходимо только от самого верхнего.

Ответ на: комментарий от anonymous

Сорян, увидел свой провтык. Отредактировал, надеюсь что будет понятно.

tip4ik32 ()
Ответ на: комментарий от anonymous

Я использовал grep -B 3 raz hello.txt. Возможно неверные флаги. Но я не смог понять какие нужны

tip4ik32 ()
Ответ на: комментарий от tip4ik32

В примере выше | grep -v raz вырезает raz. Если он нужен, то она не нужна.

anonymous ()
Ответ на: комментарий от tip4ik32

Греп – строковой фильтр. -B – вывести количество строк перед совпадением. -m – остановиться после N-ного совпадения (а не весь файл проходить), -v – наоборот.

man grep

И ещё есть источники в интернете на русском. Остальное только опытом, т.к. понять маны не всегда просто без практики.

anonymous ()
Ответ на: комментарий от tip4ik32
cat hello.txt | grep -m 1 -B 1000 raz | grep -v raz

Вообще, это не совсем корректно. Т.к. он выдаст только первые 1000 строк перед первым raz. Если известно что их там меньше, то ок. Если их там неизвестное число, то нужно что-то другое придумывать.

anonymous ()
Ответ на: комментарий от anonymous

Если строку с меткой надо убирать, то

  sed -n '/raz/! p ; /raz/ q' hello.txt
Если не надо, то вообще
  sed '/raz/ q' hello.txt
Ну и регулярку можно уточнить и заякорить для производительности.

ABW ★★★★★ ()

На второй строке поста парсер упал с ошибкой. Исправляй четвертый раз.

Radjah ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.