这是我的示例文本文件:
$ cat RealVNC\ MRU.reg
"10"="Lamborghini-:1"
"16"="Terminus-"
"20"="Midnighter-:5915"
"35"="ThreepWood-:1"
"81"="Midnighter-:1"
"58"="Midnighter-"
我愿意convert的价值观第一个字段(之间的数字""
) from 十进制转十六进制(它是 Windows 的 .reg 文件,所以我把它搞乱了,以为数字是十进制的,现在文件太长,无法手动编辑)。
我需要获得的示例结果:
$ cat Hex\ RealVNC\ MRU.reg
"0A"="Lamborghini-:1"
"10"="Terminus-"
"14"="Midnighter-:5915"
"23"="ThreepWood-:1"
"51"="Midnighter-:1"
"3A"="Midnighter-"
可以看出,只有数字已改变。
结果数字必须是两个字符长(RegEdit 认为它们不同)。
的变化行的顺序不要在这里打扰,但我认为不改变它的解决方案会更“干净”。
我不希望任何数字(无论是十进制还是十六进制)都会超过2 个字符,但是考虑这种可能性的解决方案将是最好的(因为它是一个更通用的解决方案)。
到目前为止我已经测试过:
$ cat RealVNC\ MRU.reg | awk -F \" '{print $2}'
10
16
20
35
81
58
但我不知道由谁内嵌将十进制更改为十六进制。
我的 shell 通常是 Bash,但也接受其他 shell 派生的解决方案(如 Perl 或 Python)。
一个简单的awk
:
awk -F\" '$2=sprintf("%02X", $2)' OFS=\" file
"0A"="Lamborghini-:1"
"10"="Terminus-"
"14"="Midnighter-:5915"
"23"="ThreepWood-:1"
"51"="Midnighter-:1"
"3A"="Midnighter-"
解释
The $2
分配总是true并且没有给出任何额外的操作,awk
始终将结果显示为默认操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)