2

我有这样的文本文件格式

SKI
SKII
SKIII
SKIV
SKV
SKVI
SKVII

我想用 sed 命令把它转换成数字。你能帮我吗?

SK1
SK2
SK3
SK4
SK5
SK6
SK7

非常感谢!

4

1 回答 1

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/' "$@"
于 2011-08-15T22:28:18.857 回答