Intereting Posts
печать серии символов /etc/rc.d/postgres start vs rc.d postgres start Есть ли способ предсказать назначение идентификатора PulseAudio Sink ID? Обновление до linux kernel 3.0.1, но моя карта Ethernet еще не найдена? Каковы накладные расходы на использование нескольких более мелких устройств рейдов в сравнении с секционированными устройствами рейдов в виде физических томов? Iptables разрешить входящий FTP Изменить владельца собственного каталога Как запустить мобильное широкополосное соединение в openSUSE? Бесконечный цикл данных от dev / ttyUSB при отправке AT-команд Как получить UUID раздела и определить переменную Bash как равную ей? Способы ограничения удаленного пользователя только доступом к удаленной базе данных Как я могу настроить xkb для переключения макетов в обе стороны? Исправлена ​​точка монтирования внешнего usb hdd zsh выбирает вложенный текст Как запустить раздел Windows из командной строки Grub?

Разделить файл на две строки перед шаблоном

Это почти идентичный вопрос для разбиения файла на две части по шаблону, но вместо того, чтобы иметь строки до XYZ в file1 в примере file.txt :

 ABC EFG XYZ HIJ KNL 

Я хочу, чтобы XYZ был включен в file2 (но XYZ по-прежнему является шаблоном для разделения). Теперь я использую этот ответ: https://unix.stackexchange.com/a/202516/108861, а затем добавив последнюю строку из file1 в начало file2 и удалив ее из file1 , но есть ли более простая, линейное решение?

Очень легко изменить мое решение на другой вопрос. Просто удалите next :

 perl -ne 'if(/XYZ/){$a=1} ; $a==1 ? print STDERR : print STDOUT;' file >f1 2>f2; 

Это создаст f1 со всем, вплоть до XYZ и f2 со всем остальным, включая XYZ .


В качестве альтернативы, принятый ответ от связанного с вами вопроса уже делает в значительной степени то, что вам нужно. Он просто сохраняет XYZ в первом файле. Чтобы иметь его во втором, просто инвертируйте две команды awk :

 awk '/XYZ/{out="file2"}{print >out}; ' out=file1 file 

Другой вариант (с sed )

 sed '/XYZ/,${ w file2 d }' file >file1