Text-Processing

在流中用 1 替換 0 和反之亦然的最快方法是什麼?

  • January 22, 2020

0給定一個由s 和s組成的字元串1,我的目標是將 0 替換為 1,反之亦然。例子:

輸入

111111100000000000000

預期輸出

000000011111111111111

我嘗試了以下sed命令,但未成功

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

我錯過了什麼?

你可以使用tr它,它的主要目的是字元翻譯:

echo 111111100000000000000 | tr 01 10

您的sed命令將所有 0 替換為 1,從而生成僅包含 1 的字元串(原始 1 和所有替換的 0),然後將所有 1 替換為 0,從而生成僅包含 0 的字元串。

在長流上,trsed; 對於 100MiB 文件:

$ 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

引用自:https://unix.stackexchange.com/questions/562463