38、shell编程—awk之字符串函数

1.字符串处理函数

函数名解释函数返回值
length(str)计算字符串的长度整数长度值
index(str1,str2)在str1中查找str2中的位置返回值为位置索引
tolower()转换为小写转换后的小写字符串
toupper()转换为大写转换为大写后的的字符串
substr(str,m,n)从str中的m位置截取n位截取之后的字符串
split(str,arr,fs)按照fs进行切割字符串,然后保存在arr中截取之后的字符串
match(str,RE)在str中按照RE进行查找,返回位置返回索引位置
sub(RE,RepStr,str)在字符串中查找符合RE的子串,将其替换成RepStr,只替换第一个替换的个数
gsub(RE,RepStr,str)在str中搜索符合RE的子串,然后将其替换成RepStr,替换所有替换的个数

2.实例

示例一:已:分隔符,返回/etc/passwd中每行每个字段的长度

# 第一步创建又给example.awk文件,然后文件内容如下
BEGIN{
        FS=":"
}

{
        i=0
        while(i<=NF)
        {
					# 这一步主要是将:去掉
                if (i==NF)
                        printf "%d",length($i)
                else
                        printf "%d:", length($i)
                i++

        }
        print ""
}

示例二:搜索字符串中“I have a dream”中出现“ea”字符串的位置

# index 和match是等效的
awk 'BEGIN{str="I have a dream";location=index(str,"ea");print location}'
awk 'BEGIN{str="I have a dream";location=match(str,"ea");print location}'

示例三:将字符串“i have a dream ” 按照空格分隔符,然后将数据保存到arr中

# 第一个注意的是:保存的arr已数组1开始进行的
# 第二个是默认是空格进行分割的
awk 'BEGIN{str="i have a dream";split(str,arr,"");print arr[1]}'
awk 'BEGIN{str="i have a dream";split(str,arr);print arr[1]}'

示例四:搜索字符串中“i have a 89 dream”第一个数字出现的位置

awk 'BEGIN{str="i have a 89 dream";location=match(str,/[0-9]/);print location}'

示例五:替换字符串中“i have a 89 dream 9087 haha”第一个匹配到的数字串为$符号

# 第一个替换
awk 'BEGIN{str="i have a 89 dream 9087 haha";num=sub(/[0-9]+/,"$",str);printf "%d %s",num,str}'
# 全部替换
awk 'BEGIN{str="i have a 89 dream 9087 haha";num=gsub(/[0-9]+/,"$",str);printf "%d %s",num,str}'

3.注意

  • match 可以提代index
  • 使用正则匹配必须带上 / / ====>> 重点
  • 匹配所有的数字为[0-9]+,匹配第一个数字为[0-9]
  • split函数返沪的arr,下标是从1位置开始的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值