同时替换文本文件中的两个模式

同时替换文本文件中的两个模式

我有一个包含数字的文本文件,如下所示:

34 77 1716 150?.2 67.5892 11.9691 23 1?6 83
35 78 0 0 0 0 0 0 0
36 79 0 0 0 0 0 0 0
37 80 0 0 ? ? 0 0 0
38 81 0 0 0 ? 0 0 0
39 82 0 0 0 0 ? 0 ?
40 85 169 152.8 81.5917 22.3759 18 118 100
41 251 1412 131? 97.7358 16.6563 37 126 89
42 252 578 488.5 88.?502 23.9728 29 124 95
43 253 585 518.6 95.4444 19.6661 19 119 100
44 254 576 533.2 96.4271 18.5693 13 119 106
45 255 1424 1313.3 94.7584 21.7414 14 146 132

我想同时替换每个与每个,所以上面的表格看起来?0这样0?

34 77 1716 15?0.2 67.5892 11.9691 23 106 83
35 78 ? ? ? ? ? ? ?
36 79 ? ? ? ? ? ? ?
37 8? ? ? 0 0 ? ? ?
38 81 ? ? ? 0 ? ? ?
39 82 ? ? ? ? 0 ? 0
4? 85 169 152.8 81.5917 22.3759 18 118 1??
41 251 1412 1310 97.7358 16.6563 37 126 89
42 252 578 488.5 88.05?2 23.9728 29 124 95
43 253 585 518.6 95.4444 19.6661 19 119 1??
44 254 576 533.2 96.4271 18.5693 13 119 1?6
45 255 1424 1313.3 94.7584 21.7414 14 146 132

我该怎么做?

答案1

我认为,由于您只交换单个字符,因此tr可能是完成这项工作的好工具。

尝试这样的事情:

tr '0?' '?0' < log.txt

答案2

由于您要交换单个字符,因此可以使用y命令在 sed 中音译为:

sed 'y/?0/0?/' infile

答案3

假设此文本位于名为 的文件中log.txt,只需运行以下命令:

sed "s/?/tmp/g;s/0/?/g;s/tmp/0/g" log.txt

相关内容