как /dev/stdout указывает на разные процессы отдельно в linux?

Ответ

sed -i "/^#/ { s/#\(.*\)/\1/; b }
        s/#.*//" myfile.txt

Его можно соединить в одну строку, добавив ;после }, но так будет сложнее читать.

Пояснение

sed -iСохраните изменения в файле, не записывайте их в stdout.

/^#/-Когда sedрасположен на строке, которая начинается с #.

s/#\(.*\)/\1/-Замените первое вхождение #[everything]на [everything].

b-Остановить работу над текущей строкой и начать работу над следующей.
(Запрещает выполнение команды s/#.*//.)

s/#.*//-Удалить первое вхождение #[everything].
(Это будет работать для всех строк, если только предыдущая команда bне завершилась досрочно.)

myfile.txtФайл, над которым будет выполняться sed.

0
24.03.2020, 12:41
1 ответ

В Linux /dev/std{in,out,err}не подключаться к устройствам,они дают доступ к соответствующим файловым дескрипторам каждого процесса. См. выводls -l /dev/std*:

lrwxrwxrwx. 1 root root 15 Feb 24 09:34 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Feb 24 09:34 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Feb 24 09:34 /dev/stdout -> /proc/self/fd/1

Итак, всем этим занимается /proc/self; см. Для какого процесса `/proc/self/ `?

2
28.04.2021, 23:19

Теги

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