Shell 用字符串更改数字的脚本

Shell script to change digits with strings

我需要使用 sed 命令编写一个 shell 脚本来用他们的单词更改数字,例如 1->one,2->two,...,但是当我得到 2 位数字时( 11 , 25) 不改.

对此有什么想法吗?

谢谢

假设您像我一样运行正在使用不支持正则表达式断言的 sed 版本,您可以 运行 sed -rf myscript 使用脚本像这样:

s/(^|[^[:digit:]])1($|[^[:digit:]])/one/g
s/(^|[^[:digit:]])2($|[^[:digit:]])/two/g

...继续其他数字。分解为: s 启动替代命令。 /(^|[^[:digit:]])1($|[^[:digit:]])/ 是要替换的正则表达式。 (^|[^[:digit:]]) 表示捕获行的开头或不是数字的字符。 1 是文字 1。 ($|[^[:digit:]]) 表示捕获行尾或不是数字的字符。 one 是替换字符串。 </code> 添加第一个捕获组的内容。 <code>one 添加一个文字。 </code> 添加第二个捕获组。末尾的<code>g表示替换操作应该在每一行重复尽可能多的次数。

您没有提供任何示例输入和预期输出,因此这可能会或可能不会完全按照您的要求进行,但这是正确的通用方法:

$ cat tst.awk         
BEGIN {
    split("one two three four five six seven eight nine",dig2wrd)
    dig2wrd[0] = "zero"
}
{
    for (i=1;i<=NF;i++)
        $i = ($i in dig2wrd ? dig2wrd[$i] : $i)
    print
}

$ cat file            
a b 1 c 22 d
3 e 11 4 5 6

$ awk -f tst.awk file
a b one c 22 d
three e 11 four five six