sed -i "/^#/ { s/#\(.*\)/\1/; b }
s/#.*//" myfile.txt
Его можно соединить в одну строку, добавив ;
после }
, но так будет сложнее читать.
sed -i
Сохраните изменения в файле, не записывайте их в stdout
.
/^#/
-Когда sed
расположен на строке, которая начинается с #
.
s/#\(.*\)/\1/
-Замените первое вхождение #[everything]
на [everything]
.
b
-Остановить работу над текущей строкой и начать работу над следующей.
(Запрещает выполнение команды s/#.*//
.)
s/#.*//
-Удалить первое вхождение #[everything]
.
(Это будет работать для всех строк, если только предыдущая команда b
не завершилась досрочно.)
myfile.txt
Файл, над которым будет выполняться sed
.
В 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/ `?