(мой первый подход не является правильным, так что я изменить)
Я никогда не использовал socat
, но , если он имеет -v log.txt
вариант у меня есть возможное решение для Вас, как я вижу, с -v
опцией печатает результат также для stderr.
Я предполагаю, что вы хотите, чтобы файл журнала был отправлен в log.txt, вырезали первые 10 строк и удалили все удаленные \r
. На bash, который поддерживает процесс замены это можно сделать так:
socat -v ... 2> >(awk 'NR>10 {gsub("\r","");print}'>log.txt)
(Имейте в виду пространство между двумя >
марок !!!)
Это создаст процесс и >(...)
возвращает файл например /dev/fd/68
и перенаправляет stderr
. На самом деле это труба для процесса, указанного внутри скобок (awk
). Таким образом, текст проходит через awk, и его вывод записывается в log.txt
.
Как Вы упомянули, Вы не awk это может быть решена с помощью sed (или tail
и tr
трубу, но она нуждается в дополнительном процессе).
socat -v ... 2> >(sed -e '1,10 d' -e 's/\r//g' >log.txt)
(Имейте в виду пространство между двумя >
марок !!!)
кажется cygwin не поддерживает это, но он работал на довольно старом RedHat Linux.
На самом деле Вы можете также использовать -lf
(я не уверен, что это печатает все, что вам нужно Может -v
если лучший выбор ....):
-lf <logfile>
Writes messages to <logfile> [filename] instead of stderr.
Some third party libraries, in particular libwrap, might not obey
this option.
Таким образом, оригинальный подход также может работать:
socat -lf >(sed -e '1,10 d' -e 's/\r//g' >log.txt) ...
Надеюсь, это поможет!
'man socat' должен дать вам способ сделать это, и вот http://www.dest-unreach.org/socat/doc/socat.html – BMW
Ну, я прочитал [это] (https://stuff.mit.edu/afs/sipb/machine/penguin-lust/src/socat-1.7.1.2/EXAMPLES) и [это] (http://technostuff.blogspot.com/2008/10/some-useful- socat-commands.html), а также справочную страницу. Документация дала мне несколько идей, но никто из них не работал: 'socat -v log.txt ...'имеет заголовок и ненужный' \ r', в то время как любая попытка перенести первый экземпляр 'socat' (тот, который привязывает последовательный к консоли) другому (который связывает консоль с файлом) либо вызвал ошибку (слишком много/немного адресов) или пустой файл. – Ulrik
Пожалуйста, опубликуйте вывод 'socat -v log.txt' и какие изменения должны произойти для файла в соответствии с вашими потребностями. Я уверен, что 'awk' будет делать трюк. – ShellFish