【发布时间】:2016-05-02 08:03:06
【问题描述】:
我正在尝试替换第 300 个字符并相应地添加带小数点的正号。 Sed 命令对除 B、F 和 { 之外的所有字符都非常有效。
请在下面找到输入数据:
result_PHDPTRAR2.txt
H009704COV2009084 PHD0000001H009700204COV2009084 PROD2015122016010418371304COVH009704COV2009084 PTR0000001H0097002C00000000140000000043610000003408092A0000000068061C0000000000000{0000002939340H0000000537585H0000003476926F0000001218378G0000000040292E0000000016497{0000000000827E0000001880498A9000000320436J000000004391000000001606000000000030000000000128000000000006000000004227000000000000000000000000 00000140 0000000000000{0000000000773B0000000000000{000000000000
这里的第 300 个字符是 A。如果我们使用下面的 sed 命令,它可以正确地满足上述要求:
sed -e 's/\(.\{1,255\}\)\(.\{1,34\}\)\(.\{1,9\}\)\(.*\)A/\1\2+\3.\4^/' <<< cat result_PHDPTRAR2.txt
它将A替换为^并得到以下结果。
H009704COV2009084 PHD0000001H009700204COV2009084 PROD2015122016010418371304COVH009704COV2009084 PTR0000001H0097002C00000000140000000043610000003408092A0000000068061C0000000000000{0000002939340H0000000537585H0000003476926F0000001218378G0000000040292E0000000016497{0000000000827E000+000188049.8^9000000320436J000000004391000000001606000000000030000000000128000000000006000000004227000000000000000000000000 00000140 0000000000000{0000000000773B0000000000000{000000000000
但是如果我们将第 300 个字符替换为 B、F 或 {,则相同的命令不起作用。
如果我用 B 更改输入的第 300 个字符(result_PHDPTRAR2.txt),然后如果我使用 sed
sed -e 's/\(.\{1,255\}\)\(.\{1,34\}\)\(.\{1,9\}\)\(.*\)B/\1\2+\3.\4^/' <<< cat result_PHDPTRAR2.txt
我得到以下结果:
H009704COV2009084 PHD0000001H009700204COV2009084 PROD2015122016010418371304COVH009704COV2009084 PTR0000001H0097002C00000000140000000043610000003408092A0000000068061C0000000000000{0000002939340H0000000537585H0000003476926F0000001218378G0000000040292E0000000016497{0000000000827E000+000188049.8B9000000320436J000000004391000000001606000000000030000000000128000000000006000000004227000000000000000000000000 00000140 0000000000000{0000000000773^0000000000000{000000000000
您可以在 "+000188049.8B" 中找到+ 和小数点添加正确,但 B 保持不变。这里的 B 应该替换为 ^
谁能帮帮我?
【问题讨论】:
-
请发布预期的输出并重新表述问题以使其清楚
-
我现在已经添加了预期结果