Порядок перенаправления важен, поскольку они выполняются последовательно:
stdout
(fd 1
) укажет на filename
и впоследствии stderr
(fd 2
) укажет на цель stdout
в этом примере filename
.
Это означает это оба stdout
и stderr
будьте перенаправлены к filename
Здесь stderr
(fd 2
) укажет на цель stdout
и впоследствии stdout
(fd 1
) перенаправит к filename.
Это означает это stderr
перенаправит к исходной цели stdout
и stdout
перенаправляется к filename
.
Так же короче говоря порядок перенаправлений важен, как каждый filedescriptor независим друг от друга.
Для получения дополнительной информации взгляните на некоторые другие вопросы и ответы, такие как:
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}'
Во всех контекстных адресах необходимо экранировать открывающий разделитель, если только вы не используете значение по умолчанию /
. Любые следующие случаи, которые экранируются, рассматриваются как буквальный символ, а не как конечный разделитель.
разделитель по умолчанию:
/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''.