使用SED命令将数字转换为它们的名称(1 =一个等)

时间:2019-04-11 18:28:25

标签: linux unix sed

我需要将数字转换为他们的名字,例如:1 =一个2 =两个,以此类推,但是我只能使用 SED 命令。只需一位数字即可更改。

sed 's/[1]/one/g; s/[2]/two/g; s/[3]/three/g; s/[4]/four/g; s/[5]/five/g; s/[6]/six/g; s/[7]/seven/g; s/[8]/eight/g; s/[9]/nine/g; s/[0]/zero/g'

文字:

眼睛发胖。 Win4ter的确可以反对现在改变的方式。因此提高了我迷人的形象暴露了适应性的要求。收到已严格准备好的潜水员准备生产的潜水衣。已知72ye钱6那么大的衰减声音t6到这里。保留为先生incom88888模式。他三门小子指着。 sh2a9re烦恼了他为什么要放弃最前面的风格。

结果应为:

Lo 5 眼睛发胖。赢了四个确实可以反对现在更改五个的方式。因此,imp 6 让我展示的迷人图片适应了五个需求。收到的准备好潜水的四个产品四个严格的准备潜水五个。已知72ye money 那么大的衰减声音t 在这里。保留为先生incom88888模式。他三个门指着孩子。 shtwoaninere烦恼了为什么他最不受欢迎。

2 个答案:

答案 0 :(得分:1)

使用具有-E的sed启用ERE并将\n识别为换行符(例如GNU sed):

sed -E 's/(^|[^0-9])([0-9])([^0-9]|$)/\1\n\2\n\3/g; s/\n1\n/one/g; s/\n2\n/two/g; s/\n3\n/three/g; s/\n4\n/four/g; s/\n5\n/five/g; s/\n6\n/six/g; s/\n7\n/seven/g; s/\n8\n/eight/g; s/\n9\n/nine/g; s/\n0\n/zero/g' file
Lofivese eyes get fat shew. Winfourter can indeed letter oppose way change tefivended now. So is impsixrove my charmed picture exposed adaptfiveed demands. Received had enfourd prodfouruced prepared divefiverted strictly off man br55anched. Known 72ye money sixso large decay voice tsixhere to. Preserved be mr cordially incommode as an. He threedoors qui03ck child an point at. Had shtwoa9re vexed front least style off why him.

答案 1 :(得分:1)

这可能对您有用(GNU sed):

sed -E 's/[0-9]+/\n&/g;s/\n(.[0-9])/\1/g;s/$/\n1one2two3three4four5five6six7seven8eight9nine0zero/;:a;s/\n(.)(.*\n.*\1([^0-9]+))/\3\2/;ta;P;d' file

在每组数字前添加换行符。

删除数字多于两位的前置换行符。

在行尾添加一个换行符和一个查找表。

使用循环和模式匹配将每个单个数字替换为其文字,以确保维护查找表。

打印修改后的当前行减去查询表。