Retina, 336 63 67 65 66 6262 59 bytes
[^;#] T`;#-ÿ`¯_ ;{127}|;+$ T`;#`¯ (^|¯) ¯ +T`-~`_-`[^¯] T\`¯` Readable version using hypothetical escape syntax:
[^;#] T`;#\x01-ÿ`\x01¯_ ;{127}|;+$ T`;#`\x01¯ (^|¯)\x01\x01 ¯\x02 +T`\x01-~`_\x03-\x7f`[^\x01¯]\x01 T\`¯` Does not print NUL bytes, because TIO doesn't allow them in the source code. Also prints an extra newline at the end, but I guess it can't do otherwise. Trailing newline suppressed thanks to @Leo.
-273 (!) bytes thanks to @ETHproductions.
-2 bytes thanks to @ovs.
-3 bytes thanks to @Neil. Check out their wonderful 34-byte solution.