Как использовать multiline как group-separator в grep?

В grep вы можете использовать --group-separator чтобы писать что-то между групповыми совпадениями.

Это полезно, чтобы дать понять, какие блоки у нас есть, особенно при использовании опции -CX для получения контекстных строк.

 $ cat a hello this is me and this is something else hello hello bye i am done $ grep -C1 --group-separator="+++++++++" 'hello' a hello this is me +++++++++ something else hello hello bye 

Я научился использовать пустую строку как контекст «group-separator» для grep, как просто иметь пустую строку, говоря --group-separator="" .

Однако, что, если я хочу иметь две пустые строки? Я попробовал сказать – --group-separator="\n\n" но я получаю литерал \n s:

 $ grep -C1 --group-separator="\n\n" 'hello' a hello this is me \n\n something else hello hello bye 

Другие вещи, такие как --group-separator="\nhello\n" тоже не работали.

  • Почему расширение оболочки на popd не удаляет каталог из стека?
  • Сценарий оболочки для изменения оболочки пользователя
  • Есть ли разница между read, head -1 и sed 1q?
  • Почему не найдено сопоставление файлов, если перед ними стоит звездочка (*)?
  • Установить уровень сжатия LZMA через tar
  • Найдите полный путь и имя файла под каталогом, затем перейдите в исполняемый файл в качестве аргументов
  • linux, эквивалентный команде AIX proctree, чтобы показать все дочерние и родительские процессы заданного PID
  • Написание сценария завершения вкладки для bash
  • 2 Solutions collect form web for “Как использовать multiline как group-separator в grep?”

    Ooooh Я нашел его, мне просто нужно использовать синтаксис $'' вместо $"" :

     $ grep -C1 --group-separator=$'\n\n' 'hello' a hello this is me something else hello hello bye 

    От man bash :

    квотирование

    Слова формы $ 'string' обрабатываются специально. Слово расширяется до строки с заменой символов с обратным слэшем, как указано в стандарте ANSI C. Последующие последовательности обратной косой черты, если они имеются, декодируются следующим образом:

     (...) \n new line 

    Я предлагаю использовать echo -e или printf с \\n для новой строки.

    Пример (с echo -e ):

     $ grep -C1 --group-separator="$(echo -e line1\\n\\nline2)" 'hello' a hello this is me line1 line2 something else hello hello bye 

    Пример (с printf ):

     $ grep -C1 --group-separator="$(printf hello\\nfedorqui)" 'hello' a hello this is me hello fedorqui something else hello hello bye 

    Одно из преимуществ заключается в использовании двойной кавычки . (следовательно, переменное расширение и т. д.)

    Interesting Posts

    Какой код следует использовать для загрузки и установки моего скрипта в каталог, доступный для пользователя в PATH пользователя (без необходимости sudo)?

    Курсор мыши застрял, но его движение все еще регистрируется

    Наличие сценария bash при запуске и отображение результатов при входе в систему

    Почему я не могу выполнить исполняемые файлы Android x86 в Linux?

    Будут ли флаги VMX cpu увеличивать скорость программного обеспечения виртуальной машины, например VirtualBox?

    Невозможно использовать репозитории yum, независимо от того, с базовым или зеркальным списком в CentOS 6.5

    Как удалить ограничение длины от losetup -a

    smb работает, но не отображается в сети

    Как преобразовать мои текстовые файлы (каждый из которых содержит пару имени пользователя + пароль) в CSV, чтобы импортировать их в KeePass через bash (cygwin)

    Чтение длины значения по трубопроводу?

    Ошибка компиляции wmctrl – отсутствует библиотека

    В чем разница между режимами I2C и PS2?

    Загрузите компьютер по расписанию 2 раза в будний день

    Выполнять вывод команды в tcsh

    Терминал с кнопкой «повторить последний»

    Linux и Unix - лучшая ОС в мире.