首页 > 解决方案 > 使用 SED 命令将数字转换为它们的名称(1=一个等)

问题描述

我需要将数字转换为他们的名字 ex: 1=one 2=two etc 但我只能使用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'

文本:

Lo5se 眼睛变胖了。Win4ter现在确实可以改写信反对方式了。因此,我的迷人照片暴露了改编的需求。收到已生产的已准备好的产品,已完全脱离人 br55anched。已知 72ye 钱 6so 大衰减声音 t6here 到。保留被先生亲切地incom88888mode作为一个。他对着 3doors qui03ck 子点了点头。让 sh2a9re 对他的态度感到恼火。

结果应该是:

五色眼睛变胖了。赢之三确实可以信反对改变之道的方式了。所以是小鬼漫游我的迷人照片暴露了适应ed 的要求。收到了4 个d 产品4个 uced准备好的5 个rted 严格关闭 man br55anched。已知 72ye 钱这么大的衰减声音 t到这里来。保留被先生亲切地incom88888mode作为一个。他三门qui03ck子一指。让 shtwoaninere 对他最不友好的风格感到恼火。

标签: linuxunixsed

解决方案


使用 sed 必须-E启用 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.

推荐阅读