替换 shell 中的确切数字

replace exact number in shell

我有以下矩阵:

 0.380451   0.381955    0   0.237594
 0.317293   0.362406    0   0.320301
 0.261654   0.38797 0   0.350376
 0  0   0   1
 0  1   0   0
 0  0   0   1
 0  0.001504    0   0.998496
 0.270677   0.35188 0.018045    0.359398
 0.36391    0.305263    0   0.330827
 0.359398   0.291729    0.037594    0.311278
 0.359398   0.276692    0.061654    0.302256

我只想替换零而不是零后跟点到 0.001,如何使用 sed 或 gsub 来实现?

匹配替换中的空格。

echo 0  0.001504    0   0.998496  | sed 's/0[\t ]/Z /g'

这不是很优雅,也不是超级便携,但它适用于您的特定示例:

sed -e 's=^0 =X =g
        s= 0$= X=g 
        s= 0 = X =g' data.txt

首先,它假定输入文件中的字段由一个或多个空格分隔。第一部分在行首找“0”,第二部分在行尾找“0”,第三部分找两边有空格的“0”

为此仅使用 sed 有什么特别的原因吗?我相信一个简单的 awk 脚本可以做得更好,也更健壮。