Найдите номер строки, который содержит шаблон, используя специальный разделитель регулярных выражений

Как в примере, я пытаюсь получить номера строк, которые содержат шаблон. Мой шаблон содержит слэши, поэтому я хотел добавить пользовательский разделитель.

Этот простой работает:

sed -n '/file/=' temp.txt 

Использование ограничителя для замены строк также работает:

 sed 's|file|gile|' temp.txt 

но когда я хочу добавить разделитель в первый пример, это не так:

 sed -n '|file /etc|=' temp.txt 

Я знаю, что я могу избежать слэшей, но я бы предпочел добавить пользовательский разделитель. Любая идея, как исправить мою команду?

2 Solutions collect form web for “Найдите номер строки, который содержит шаблон, используя специальный разделитель регулярных выражений”

Стефан дал вам решение:

 sed -n '\|file /etc|=' file 

Если вы открыты для использования других инструментов, вы также можете

 grep -n 'file /etc' file 

Это также напечатает сама строка, чтобы получить только номер строки:

 grep -n 'file /etc' file | cut -d: -f 1 

Или вы можете использовать perl :

 perl -lne 'm|file /etc| && print $.' file 

Или awk :

 awk '$0 ~ "file /etc" {print NR}' 

Во всех контекстных адресах вы должны избегать открытия разделителя, если вы не используете значение по умолчанию / . Любые последующие вхождения, которые экранированы, рассматриваются как буквенный символ, а не как конечный разделитель.

  • разделитель по умолчанию:

     /start/,/end/{/pattern/d;} 
  • пользовательский разделитель:

     \#start#,\#end#{\#pattern#d;} 

См. Документы POSIX :

В контексте адреса конструкция \ cREc, где c – любой символ, отличный от символа обратной косой черты или символа новой строки, идентична / RE /. Если символ, обозначенный символом c, появляется после обратного слэша, тогда он считается тем буквальным символом, который не завершает RE. Например, в контексте address \ xabc \ xdefx второй x обозначает себя, так что регулярное выражение является abcxdef.

Подобное описание в странице sed man GNU sed man :

 /regexp/ Match lines matching the regular expression regexp. \cregexpc Match lines matching the regular expression regexp. The c may be any character. 

и sed man страница FreeBSD sed man :

 In a context address, any character other than a backslash (``\'') or newline character may be used to delimit the regular expression. The opening delimiter needs to be preceded by a backslash unless it is a slash. For example, the context address \xabcx is equivalent to /abc/. Also, putting a backslash character before the delimiting character within the regular expression causes the character to be treated literally. For example, in the context address \xabc\xdefx, the RE delimiter is an ``x'' and the second ``x'' stands for itself, so that the regular expression is ``abcxdef''. 
  • Как ограничить MAX MIN длиной строки?
  • База данных библиотек
  • найти и заменить строку в файле без использования временного файла с SED
  • sed: проблема при замене строки с помощью шаблона
  • Команда sed и форматирование одной строки
  • Внедрить включение другого файла в поток (чтение из stdin)
  • Добавить строку во многие файлы
  • Извлечь часть значения из пары ключ-значение, разделенной двоеточием в Linux
  • Удалите только запятые, присутствующие в двойных кавычках
  • Обработка текста и экспорт содержимого на лист Excel
  • awk или sed в нижнем регистре / в верхнем регистре только один символ в строке?
  • Interesting Posts

    Рекомендация для пула накопителей usb

    rsync жалуется на символические ссылки

    Запуск в корневой оболочке из скрипта пользователя bash

    Зачем мне нужна двойная тире до того, как аргумент передан sh на xargs -I, чтобы он работал правильно?

    Как включить браузер vsync в Linux?

    Почему моя мышь с двойным прокруткой работает только так, как будто у нее одно колесо?

    ненужные учетные записи в Linux

    Включение / dev / fb0 на виртуальных машинах CentOS 7?

    Цвет точки монтирования

    Что такое glob, который соответствует всем ~ / xy *, за исключением ~ / xyz *?

    Как получить абсолютное положение (x, y координаты) пальца на сенсорной панели?

    Получение Linux-компьютера, интегрированного с доменом Windows

    Неудовлетворительные зависимости, использующие apt-get на Ubuntu

    Как обеспечить программное обеспечение на нескольких ноутбуках

    Скопировать initramfs в определенное место после сборки?

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