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
我需要使用 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