Если ваша строка содержит только одну строку и состоит только из 0 и 1, вы можете использовать это
echo "111111100000000000000" |
perl -e 'while (read(STDIN, $b, 1)) { print chr(ord($b) ^ 1); } print "\n";'
Если строка может содержать несколько строк, просто измените perl -e
на perl -ne
и измените способ чтения байтов (, так как read
нужен дескриптор файла)
echo -e "111111100000000000000\n0001111010101" |
perl -ne 'while (/(.)/g) { print chr(ord($1)^1) } print "\n"'
Однако таким образом каждая строка разбивается на строку, поэтому для больших файлов это может быть не очень эффективно. В этом случае необходима небольшая проверка
echo "122111111034000000000abc0000" | perl -e 'while (read(STDIN, $b, 1)) {
print ($b eq '0' or $b eq '1' ? chr(ord($b) ^ 1) : $b) } print "\n";'
Как видите, этот способ работает и для строк, содержащих символы, отличные от '0'
и '1'
Хорошо, получается, что для того, чтобы пульсаудио знал об устройстве alsa, нужно (заменить в конце концов имя устройства):
pacmd load-module module-alsa-source device=hw:Loopback,1,0