Для этого можно использовать tr
, его основная цель — перевод символов:
echo 111111100000000000000 | tr 01 10
Ваша команда sed
заменяет все 0 на 1, что приводит к строке, содержащей только 1 с (исходные 1 с и все замененные 0 с ), а затем заменяет все 1 с 0 с, в результате чего строка содержит только 0 с.
В длинных потоках tr
быстрее, чем sed
; для файла размером 100 МиБ:
$ time tr 10 01 < bigfileof01s > /dev/null
tr 10 01 < bigfileof01s > /dev/null 0.07s user 0.03s system 98% cpu 0.100 total
$ time sed y/10/01/ < bigfileof01s > /dev/null
sed y/10/01/ < bigfileof01s > /dev/null 3.91s user 0.11s system 99% cpu 4.036 total