我有像这样的文本文件格式
SKI
SKII
SKIII
SKIV
SKV
SKVI
SKVII
我想用sed命令将其转换为数字。你能救我一下吗?
SK1
SK2
SK3
SK4
SK5
SK6
SK7
非常感谢!
答案 0 :(得分:2)
没有简单的方法可以做到这一点。需要蛮力加上一些小心:
sed -e 's/SKIII/SK3/' \
-e 's/SKII/SK2/' \
-e 's/SKIV/SK4/' \
-e 's/SKVIII/SK8/' \
-e 's/SKVII/SK7/' \
-e 's/SKVI/SK6/' \
-e 's/SKV/SK5/' \
-e 's/SKI/SK1/' "$@"
通常,较长的序列必须位于较短的序列之前。这仅涉及1-8;概括它是非常困难的。
实际上需要从1到29的数字。我该如何处理?同样的方法?
如果您放弃了SK前缀,那么稍加注意,您不需要29个单独的-e
表达式(当然这会起作用)。此脚本将带您到39(测试到31,一个月内的最大天数);我相信,达到99所需的扩展是相当明显的(我认为还有13个-e
表达式)。请注意包含零的数字的特殊情况处理。
sed \
-e 's/IX/9/' \
-e 's/XXX$/30/' \
-e 's/XXX/3/' \
-e 's/XX$/20/' \
-e 's/XX/2/' \
-e 's/X$/10/' \
-e 's/X/1/' \
-e 's/VIII/8/' \
-e 's/VII/7/' \
-e 's/III/3/' \
-e 's/II/2/' \
-e 's/IV/4/' \
-e 's/VI/6/' \
-e 's/V/5/' \
-e 's/I/1/' "$@"