ストリームでゼロを1に、またはその逆に置き換える最速の方法は何ですか?

ストリームでゼロを1に、またはその逆に置き換える最速の方法は何ですか?

0sとsで構成される文字列が与えられた場合、1私の目標は0を1に変更するか、その逆に置き換えることです。例:

入力する

111111100000000000000

期待される出力

000000011111111111111

sed私は成功せずに次のコマンドを試しました

echo '111111100000000000000' | sed -e 's/0/1/g ; s/1/0/g'
000000000000000000000

私は何を見逃していますか?

ベストアンサー1

あなたはそれを使用することができますtrこの目的の主な目的は文字翻訳です。

echo 111111100000000000000 | tr 01 10

コマンドsedは、すべての0を1に置き換えて1のみを含む文字列(元の1とすべて置き換えられた0)を生成し、すべての1を0に置き換えて0のみを含む文字列を生成します。

長いストリームでは、100MiBファイルよりtrも高速です。sed

$ 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

おすすめ記事