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

Порядок перенаправления важен, поскольку они выполняются последовательно:

> имя файла 2> &1

stdout (fd 1) укажет на filename и впоследствии stderr (fd 2) укажет на цель stdout в этом примере filename.

Это означает это оба stdout и stderr будьте перенаправлены к filename

2> &1> имя файла

Здесь stderr (fd 2) укажет на цель stdout и впоследствии stdout (fd 1) перенаправит к filename.

Это означает это stderr перенаправит к исходной цели stdout и stdout перенаправляется к filename.

Так же короче говоря порядок перенаправлений важен, как каждый filedescriptor независим друг от друга.

Дополнительная информация

Для получения дополнительной информации взгляните на некоторые другие вопросы и ответы, такие как:

7
26.09.2015, 19:07
2 ответа

Stéphane дал вам SED SED :

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}'
9
27.01.2020, 20:16

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

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

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

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

См. POSIX docs:

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

Аналогичное описание в GNU sed man page:

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

и FreeBSD sed man page:

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''.
4
27.01.2020, 20:16

Теги

Похожие вопросы