Как отслеживать STDOUT команды cat [дубликат]

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

Работает

  • Пока не в eof $!{...} мы добавляем следующую строку в пространство шаблонов при условии, что текущая линия представляет собой линию интереса.
  • Затем мы пропускаем дальнейшую обработку в случаях: а) Новая строка не найдена => в текущей строке нет шаблона. б) Число с плавающей запятой формата .nnn во второй строке. c) Число с плавающей запятой в формате ммм, ммм. или ммм.нн находится исключительно во второй строке. г) За исключением любой из возможностей => нам нужно добавить магическое число 1000 в конец следующей строки после новой строки.
0
30.06.2018, 00:27
2 ответа

/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!

Вы не можете повторить что-либо в процессе таким образом.

3
28.01.2020, 02:18

Возможно, вы захотите взглянуть на команду tee (1 ), которая в основном является соединением T -для команд unix :она перенаправляет свой стандартный ввод как на стандартный вывод, так и в файл (за которым вы можете следить -F)

1
28.01.2020, 02:18

Теги

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