Я пробовал awk:
awk -v RS="zuzu_mumu" '{print RS $0}' input_file > output_file
Полученный файл является точным input_file, но теперь первая строка в файле — zuzu_mumu. Как можно исправить мою команду?
Решение проблемы
Вывести все строки между строкой, содержащей строку, и первой пустой строкой, начиная со строки, содержащей эту строку
Я бы использовал GNU AWKдля этой задачи. Пусть file.txtконтент будет
Able
Baker
Charlie
Dog
Easy
Fox
потом
awk 'index($0,"aker"){p=1}p{if(/^$/){exit};print}' file.txt
выход
Baker
Charlie
Объяснение: используйте indexфункцию String, которая дает либо положение akerво всей строке ( $0), либо 0обрабатывает это как условие, поэтому оно используется как внутри akerстроки? Обратите внимание, что использование indexвместо регулярного выражения означает, что нам не нужно заботиться о символах со специальным значением, таких как, например, .. Если он устанавливает pзначение 1. Если pthen, если это пустая строка (соответствует началу строки, за которым следует конец строки), завершить обработку ( exit); printвся линейка как есть.
(проверено в gawk 4.2.1)
Комментариев нет:
Отправить комментарий