sed将所有零替换为1,将所有1替换为零

sed将所有零替换为1,将所有1替换为零,sed,Sed,请注意: 0 | 11 | 10 | 01 | 0。| 10 |。 想要这个: 1 | 0 0 | 0 1 | 1 0 | 1.| 0 1 | 我想这会有用的: sed-e's/0/1/g'-e's/1/0/g' 但似乎给了我所有的零让我们玩电脑吧 鉴于此: 0 | 11 | 10 | 01 | 0。| 10 |。 。。。将所有0更改为1。现在你有了这个: 1 | 11 | 11 | 11 | 1.| 11 | 。。。好了,现在你被卡住了。只剩下1秒了,您不知道该换回哪一个 。。。因此,将0改为

请注意:
0 | 11 | 10 | 01 | 0。| 10 |。

想要这个:
1 | 0 0 | 0 1 | 1 0 | 1.| 0 1 |

我想这会有用的:
sed-e's/0/1/g'-e's/1/0/g'

但似乎给了我所有的零

让我们玩电脑吧

鉴于此:

0 | 11 | 10 | 01 | 0。| 10 |。

。。。将所有0更改为1。现在你有了这个:

1 | 11 | 11 | 11 | 1.| 11 |

。。。好了,现在你被卡住了。只剩下1秒了,您不知道该换回哪一个

。。。因此,将0改为2,只需一小会儿:

2 | 11 | 12 | 21 | 2.| 12 |

。。。现在将1改为0

2 | 0 0 | 0 2 | 2 0 | 2.| 1 2 |

。。。然后是2到1

1 | 0 0 | 0 1 | 1 0 | 1.| 1 1 |

现在是大结局:

$ sed -e 's/0/2/g' -e 's/1/0/g' -e 's/2/1/g'

有一个稍微不太为人所知的sed,它在这里派上了用场:

$ sed 'y/01/10/' <<< '0|1    1|1    0|0    1|0    .|1    0|.'
1|0    0|0    1|1    0|1    .|0    1|.

$sed'y/01/10/“请看,它以全零结尾,因为您首先将所有零替换为1(给您一个全1字符串),然后将所有这些零替换为零。一个解决办法是把所有的一换成二,然后把所有的零换成一,然后把所有的二换成零。@KenWhite伟大的思想都是一样的!真有趣,我们都选了2@MikeSlinn:真有趣。:-)你回答得也很好。美好的这个解决方案就是要使用的。这正是问题所要求的,以一种稳健可靠的方式,而不是依赖于一个老套的临时替代。不知道为什么这个答案被否决了——它很好地解释了问题,并提供了一个体面的解决方案。请投赞成票。谢谢@EthanFurman