sed -e '
$!{
/pattern\.[a-z]/N
/\n/!b
/\n[+-]\{0,1\}[.][0-9]\{1,\}$/b
/\n[+-]\{0,1\}[0-9]\{1,\}\([.][0-9]*\)\{0,1\}$/b
h;s/\(.*\n\).*/\11000/p
g;D
}
/pattern\.[a-z]/a\
1000
' yourfile
pattern.d
17.91
17.55
pattern.b
1000
pattern.a
7.21
9.34
pattern.c
1000
$!{...}
мы добавляем следующую строку в пространство шаблонов при условии, что текущая линия представляет собой линию интереса. /proc/2357/fd/0 — файловый дескриптор 0 процесса cat, который является самим терминалом. /proc/2357/fd/1 — это файловый дескриптор 1 процесса cat, который вы подключили к файлу out.log.
Теперь, если вы выведете что-то в /proc/2357/fd/0, оно попадет в терминал, потому что это файл, на который ссылается дескриптор.
Если что-то отправить в /proc/2357/fd/1, то оно попадет в out.log, но не через cat!
Вы не можете повторить что-либо в процессе таким образом.
Возможно, вы захотите взглянуть на команду tee (1 ), которая в основном является соединением T -для команд unix :она перенаправляет свой стандартный ввод как на стандартный вывод, так и в файл (за которым вы можете следить -F)