awk '{sub(/^#/,"")sub(/#/," &");print $1}' file
abc
nrt
clb1aX
amd
Есть ли у вас доступ к исходникам запущенных программ?
Принудительная очистка произвольного исполняемого файла, хотя теоретически и не невозможна, очень сложна. Вам нужно будет найти в коде функцию fflush
и аргумент stdout
, затем прервать выполнение программы, организовать вызов fflush
, затем продолжить выполнение. Если программа использует разделяемую библиотеку, это, по крайней мере, упрощает первую часть, поиск fflush
и stdout
, но вам все равно нужно смоделировать вызов. Кроме того, для неизвестного двоичного файла вы не можете знать, использовал ли он stdio или реализовал свой собственный механизм буферизации. Знание пути к выходному файлу вам не поможет.
Вы можете попробовать использовать gdb
, затем использовать команду attach
для подключения к процессу. Возможно, gdb
может вызвать функцию fflush
.
Если у вас есть исходный код программы, реализуйте обработчик сигналов, который очищает буфер и просто отправляет сигнал, когда вы хотите очистить буфер.
Вы можете попробовать канал, возможно, программы не буферизуются, если вывод является каналом. Измените его на
./program | your_program > out.bin
Ваша программа может принимать ввод, буферизовать его и очищать буфер при получении сигнала. Это все равно добавит нагрузку на ЦП, но не на диск.
gdb -p PID -batch -ex 'p fflush(stdout)'
Как и при любой отладке и взломе, YMMV.