sed - 使用 sed 将数字 0-9 转换为大型列表中的十六进制值

标签 sed hex

我有一个 10,000,000 位的数字串。数字没有任何分隔,它们都像这样挤在一起(它是 pi 的前 10,000,000 位的一长串):

1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

我正在尝试使用 sed 将每个数字替换为十六进制颜色值。这是我的代码:

sed -e 's/0/#F5F5F5/' -e 's/1/#FFE4B5/' -e 's/2/#98FB98/' -e 's/3/#ADFF2F/' -e 's/4/#FF69B4/' -e 's/5/#BA55D3/' -e 's/6/#FF6347/' -e 's/7/#2E8B57/' -e 's/8/#8B4513/' -e 's/9/#000000/' < pi > pi2

问题是,sed 开始从我的十六进制代码替换中转换数字。我希望这些转换保持不变。我该如何防止呢?希望这已经足够清楚了。

最终得到这样的结果:

#FFE#FF#FF634#2E#8B4513B57#000000B4B#BA55D34159#98FB986535897932384626433832795#F5F5F528841971693993751

最佳答案

如果您在开头添加一个 sed 命令并对每个现有命令进行小的更改,则可以坚持使用这种方法:

sed -e 's/\(.\)/\1,/g' -e 's/0,/#F5F5F5/g' -e 's/1,/#FFE4B5/g'  ...  < pi > pi2

1) 用逗号标记输入中的每个整数。

2) 进行替换时,仅替换后面跟有逗号的整数,并在替换完每个整数后删除逗号。

此外,作为错误修复,您还应该在每次替换时添加 g 选项。

关于sed - 使用 sed 将数字 0-9 转换为大型列表中的十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365976/

相关文章:

python搜索/用类似sed的表达式替换正则表达式

bash - 如何使用sed从文本文件中删除第一个和最后两个字符?

bash - 为什么在管道中读取和写入同一文件会产生不可靠的结果?

c - 分离数据并存储在数组中

python - 从十六进制转换为二进制而不丢失前导 0 的 python

bash - 将文本添加到制表符分隔文件中的特定列?

linux - 如何从 .CSV 文件的几列中删除撇号 ( ' )?

将十六进制字符串转换为 char

c++ - 状态机问题

c - 在 C 中通过串行端口发送十六进制值