streamer -o - | { dd bs=1 count=1 2>/dev/null; pkill screen_saver; cat; } | mpv -
Первый байт из streamer
захватывается dd
и проходит дальше }
. dd
немедленно завершается, pkill
запускается, затем все остальное проходит через cat
. Весь поток должен попасть в mpv
.
Это требует, чтобы pkill
молчал в своем стандартном выводе и ничего не читал из streamer
. Мой pkill
такой. На всякий случай вы можете убедиться, что:</dev/null pkill screen_saver >/dev/null
.
Чтобы проверить идею с помощью обычных инструментов, запустите:
cat | { dd bs=1 count=1 2>/dev/null; echo "triggered" >&2; cat; } | cat
и введите что-нибудь (первое cat
, вероятно, получит что-нибудь только после того, как вы нажмете Enter). Вы увидите triggered<newline>
, вставленное сразу после первого байта вашего ввода. Обратите внимание, что эта строка не мешает потоку, который получает последний cat
, потому что она печатается в stderr; это здесь только для того, чтобы показать, что запуск происходит, когда вам это нужно.
Имейте в виду, что dd
работает с байтами, поэтому, если первый введенный вами символ многобайтовый -(, например,. ś
в UTF -8 ), то вывод может вас удивить (, потому что ваша консоль обрабатывает и чередует stdout и stderr команд ). Это означает только то, что срабатывание произошло в середине -символа, сразу после первого байта , точно так, как задумано.
Отбросьте скобки, иначе Sed попытается сопоставить скобки в вашем файле.
{n}
является частью расширенных регулярных выражений. Дайте Sed флаг -E
, чтобы включить их (sed -Ef redact.sed redact.txt
), или экранируйте каждую фигурную скобку.
Обратите внимание, что ваш файл содержит что-то вроде en -тире (0xE28892 ):Это не старый добрый 0x2D ASCII -
, так что вам также нужно поместить его в выражение Sed.
sed 's/[0-9]\{3\}−[0-9]\{2\}−[0-9]\{4\}/xxx-xx-xxxx/g'
sed -E 's/[0-9]{3}−[0-9]{2}−[0-9]{4}/xxx-xx-xxxx/g'