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

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

 ABC EFG XYZ HIJ KNL 

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

  • TAR: лучше пропустить каталог или использовать split
  • K3b для разделения громкости на носители
  • Как расколоть stdin в несколько многострочных строк и поместить каждый из них в разные переменные bash
  • Каков наилучший способ присоединиться к файлам снова после их разделения?
  • Разделить текстовый файл на строки с фиксированным числом слов
  • Регулярное выражение ERE для разделения () между разделителем и конечным словом
  • Разделить файл по количеству строк, включая заголовок в каждом из них
  • Удаление поля из текста с разделителями-запятыми с акцентированными символами
  • 2 Solutions collect form web for “Разделить файл на две строки перед шаблоном”

    Очень легко изменить мое решение на другой вопрос. Просто удалите 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 
    Linux и Unix - лучшая ОС в мире.