利用awk命令提取字符串中的所有数字

利用awk命令提取字符串中的所有数字

用awk命令提取一串字符中的数字,此方法只适用于第一个字符不是数字的:

$ echo a1c2d3d1456e78f9 | awk '
{
string=$0
len=length(string)
for(i=0; i<=len; i++)
{
tmp=substr(string,i,1)
if(tmp ~ /[0-9]/)
{
str=tmp
str1=(str1 str)
}
}
print str1
}'

输出
1231456789


以上的能够实现其功能,但是如果第一个字符为数字的时候就不会成立了,他会重复打印一次第一个数字(即会输出11231456789),下面给出都是用的方案:

$ echo b1c2d3d1456e78f9 | awk '
{
string=$0
len=length(string)
for(i=0; i<=len; i++)
{
tmp=substr(string,i+1,1)
if(tmp ~ /[0-9]/)
{
str=tmp
str1=(str1 str)
}
}
print str1
}'

输出
1231456789


或者:

$ echo b1c2d3d1456e78f9 | awk '
{
string=$0
len=length(string)
for(i=1; i<=len; i++)
{
tmp=substr(string,i,1)
if(tmp ~ /[0-9]/)
{
str=tmp
str1=(str1 str)
}
}
print str1
}'

利用同样的方法,可以拓展到一些其他的功能,比如提取大小写的英文字母或者是一些特殊的符号。我们只需要更改[0-9]这个条件:吐舌头

[a-zA-Z]           提取大小写英文字符

[^0-9a-zA-Z]    提取除了数字,大小写英文以外的字符等等。

$ echo b1c2d3d1456e78f9 | awk '
{
string=$0
len=length(string)
for(i=1; i<=len; i++)
{
tmp=substr(string,i,1)
if(tmp ~ /[a-zA-Z]/)
{
str=tmp
str1=(str1 str)
}
}
print str1
}'


 

猜你喜欢

转载自blog.csdn.net/xiaobaiing/article/details/46233821
今日推荐