字符串处理的时候,有求字符串长度,截取子串,替换子串的操作,大小写转换的操作。字符串的打印操作。

子串处理函数
index(s,t) 返回字符串t(子串)在字符串s(父串)中出现在最左边的位置,如果子串在父串中不存在,那么返回0。字符串中字符的位置是从1开始的。注意:字符串一定要用双引号括起来而不是单引号。

[root@centos7 ~]# awk 'BEGIN{print index("abc","b")}'
2
[root@centos7 ~]# awk 'BEGIN{print index("abc","s")}'
0
[root@centos7 ~]#

substr(s,p) 在字符串s中返回从位置p到结尾的子串(包括p位置上的字符)。
substr(s,p,n) 在字符串s中返回从位置p开始(包括p位置的字符)往结尾方向,总共n个字符的子串。

[root@centos7 ~]# awk 'BEGIN{print substr("abcdefgh",index("abcdefgh","f"))}'
fgh
[root@centos7 ~]#
[root@centos7 ~]# awk 'BEGIN{print substr("abcdefgh",index("abcdefgh","f"),2)}'
fg
[root@centos7 ~]#

举例:将/etc/passwd中的第1个字段第1个字母修改成大写,其他都不变输出。

[root@centos7 awk]# cat rule
BEGIN{lower="abcdefghijklmnopqrstuvwxyz"
upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
FS=":"
}
{#先确定第1个字段中的第1个字符是什么
firstchar=substr($1,1,1)
#由于lower和upper两个变量是对应关系,因此确定出小写字母中位置,那么在upper中取出这个字符然后跟$1字段剩余的拼接就形成了新的$1,然后打印整个字符串$0
#字符串的拼接就两个写在一起
if (pos=index(lower,firstchar)) $1=substr(upper,pos,1)substr($1,2)
print $0
}
[root@centos7 awk]#
[root@centos7 awk]# awk -f rule /etc/passwd
Root x 0 0 root /root /bin/bash
Bin x 1 1 bin /bin /sbin/nologin
Daemon x 2 2 daemon /sbin /sbin/nologin
Adm x 3 4 adm /var/adm /sbin/nologin

字符串长度
length(s)获取字符串的长度,length()获取$0的长度

[root@centos7 ~]# awk -F: '{print length($1)}' /etc/passwd
4

替换函数
sub(r,s,t) 在字符串t中用s替换正则表达式r匹配到的第一个字符串。如果替换成功返回1,否则返回0。如果没有指定t,那么默认就是用$0.
gsub(r,s,t) 在字符串t中用s替换正则表达式r匹配到的所有字符串。如果替换成功返回n,n代表替换了几处,否则返回0。如果没有指定t,那么默认就是用$0.
正则表达式r需要用/…/括起来,也可以用变量来表示,用变量表示时候,不需要括起来。
在gsub或者sub中的替换字符串里出现&的时候,就是代表正则表达式匹配到的字符。那么替换字符串就可以结合正则表达式匹配的字符串了。
替换函数就是直接替换字符串。

[root@centos7 ~]# awk 'BEGIN{str="abcdabcdabcd";print sub(/a/,"A",str);print str}'
1
Abcdabcdabcd
[root@centos7 ~]# #正则表达式var="a"在变量中必须用""括起来。
[root@centos7 ~]# awk 'BEGIN{str="abcdabcdabcd";var="a";print gsub(var,"A",str);print str}'
3
AbcdAbcdAbcd
[root@centos7 ~]#
[root@centos7 ~]# awk 'BEGIN{str="abcdabcdabcd";print gsub(/a/,"A",str);print str}'
3
AbcdAbcdAbcd
[root@centos7 ~]# [root@centos7 ~]# awk 'NR==1{sub(/root/,"ROOT");print $0}' /etc/passwd
ROOT:x:0:0:root:/root:/bin/bash
[root@centos7 ~]# awk 'NR==1{gsub(/root/,"ROOT");print $0}' /etc/passwd
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
[root@centos7 ~]#

在gsub或者sub中的替换字符串里出现&的时候,就是代表正则表达式匹配到的字符。
如果只是单纯打印字符“&”,那么需要转义,转义用\来进行

[root@centos7 ~]# awk 'BEGIN{str="abc";print sub(/a/,"&->A",str);print str}'
1
a->Abc
[root@centos7 ~]#
[root@centos7 ~]# awk 'BEGIN{str="abc";print sub(/a/,"\\&->A",str);print str}'
1
&->Abc
[root@centos7 ~]#
[root@centos7 ~]# awk 'BEGIN{print "\\"}'
\
[root@centos7 ~]#

大小写转换函数
tolower(s) 将字符串s中所有字符转换成小写字符
toupper(s)将字符串s中所有字符转换成大写字符

[root@centos7 ~]# awk 'BEGIN{print toupper("aA")}'
AA
[root@centos7 ~]# awk 'BEGIN{print tolower("aA")}'
aa
[root@centos7 ~]#

子串匹配函数match
match(s,r) 该函数用于确定正则表达式r是否和指定字符串s匹配,如果匹配上,那么返回正则表达式中第1个字符匹配的位置。这个函数可以作为条件判断。在系统变量中,RSTART用于存放第1个匹配到的字符的位置,RLENGTH变量存放匹配到的字符长度。

#这个正则是匹配大写字符,第一个大写字符U在字符串中的第5个位置,因此返回5
[root@centos7 ~]# awk 'BEGIN{print match("the UNIX operating system",/[A-Z]+/)}'
5
[root@centos7 ~]#
#这里的5代表从第5个字符开始,4代表正则表达式匹配到4个字符,即UNIX
[root@centos7 ~]# awk 'BEGIN{print match("the UNIX operating system",/[A-Z]+/);print RSTART,RLENGTH}'
5
5 4
[root@centos7 ~]#

index(s,t)和match(s,r)的区别
index中子串无法用正则表达式,而match中可以使用。

[root@centos7 ~]# awk 'BEGIN{print index("the UNIX operating system","UNIX")}'
5
[root@centos7 ~]# awk 'BEGIN{print index("the UNIX operating system",/[A-Z]+/)}'
0
[root@centos7 ~]# awk 'BEGIN{print match("the UNIX operating system",/[A-Z]+/);print RSTART,RLENGTH}'
5
5 4
[root@centos7 ~]#

awk中字符串处理函数相关推荐

  1. oracle 字符转整数,Oracle中字符串转换函数小数转法

    Oracle中字符串转换函数小数转法 类别:Oracle数据库   作者:码皇   来源:薛凯博客     点击: Oracle中字符串转换函数小数转法 to_char()函数的字符串转换格式归纳如下 ...

  2. mysql sql字段切割_sqlserver中字符串切割函数总结

    本文章收藏了大量的在sqlserver中字符串切割函数,包括了自用自定义函数或sql带带的函数来操作,有需要了解的同学可参考一下 实例1 循环while一个个读取 代码如下 复制代码 ALTER FU ...

  3. Python中字符串操作函数string.split('str1')和string.join(ls)

    Python中的字符串操作函数split 和 join能够实现字符串和列表之间的简单转换, 使用 .split()可以将字符串中特定部分以多个字符的形式,存储成列表 1 def split(self, ...

  4. c,c++中字符串处理函数strtok,strstr,strchr,strsub

    http://blog.csdn.net/wangqing_12345/article/details/51760220 1,字符串切割函数 函数原型:char *strtok(char *s, ch ...

  5. mysql中字符串拼接函数_MySQL 字符串连接CONCAT()函数

    MySQL字符串连接函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符 ...

  6. c语言中接收字符串函数,C语言中字符串处理函数拾锦

    之前在学习C语言的时候,知道C语言库函数中有很多字符串处理函数,但是没怎么好好利用它.最近,发现它们的作用实在太大了,而且有些是我从来都没有用过的.今天想整理一下,方便以后使用.比较容易理解的,就没有 ...

  7. SQL Server中字符串处理函数

    SQL Server中截取字符串常用函数 截取字符串中的最后一个斜杠后的所有字符: SELECT A.PIC_URL, RIGHT(A.PIC_URL,(CHARINDEX('/',REVERSE(A ...

  8. linux下通过字符串调用函数,linux中字符串转换函数 simple_strtoul

    转自 http://blog.csdn.net/tommy_wxie/article/details/7480087 Linux内核中提供的一些字符串转换函数: lib/vsprintf.c 1. u ...

  9. hive中字符串查找函数 instr 和 locate

    instr( ) 字符串查找函数: instr 语法: instr(string str, string substr)                                        ...

最新文章

  1. Kubernetes + CRI + Kata + Firecracker
  2. python 豆瓣评论数据分析_Python爬虫实战案例:豆瓣影评大数据分析报告之网页分析...
  3. 【深度学习】preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
  4. 关于TensorFlow开发者证书,你想要的资源都在这里!
  5. Python与C语言的区别是什么?
  6. ORACLE SGA问题分析
  7. conda如何升级pytorch_Google Cloud TPUs 支持 Pytorch 框架啦!
  8. linux计划任务案例,Linux计划任务Crontab学习笔记(5):常见错误使用案例
  9. 鸿蒙智慧屏桌面,全球首发国产鸿蒙操作系统,荣耀智慧屏现场亲测
  10. 智慧城市开放数据的发展趋势分析及探讨
  11. C语言大数阶乘的求法
  12. 【VMCloud云平台进阶篇】应用层面优化
  13. html页面右下角添加js广告,JS右下角悬浮广告代码的简单示例
  14. 云计算IaaS-Pssa-Saas(云计算的基本架构)
  15. Channel Access Protocal——EPICS Base-3.16版CA协议 - 字节序与数据类型
  16. 比较常见的几种代理ip类型
  17. 爬虫-招聘系列2----boss某直聘
  18. Python列表实现矩阵的创建、输入输出、转化转置、加减乘运算并设计一个矩阵计算器GUI界面
  19. STM32的 DHT11温湿度模块+红外人体感应模块程序
  20. 「水花投资」投的是什么?

热门文章

  1. 信息系统项目管理师第三版 pdf可编辑_信息系统项目管理师教程(第三版)——可行性研究...
  2. 【2020百度发帖教学】百度贴吧怎么发帖顶帖?发广告图不删?还能带联系方式推广?
  3. NXP(Freescale) QorIQ T2080 SRIO使用
  4. 软件工具下载集合(1)
  5. Builder设计模式构建NavigationBar
  6. spring基于注解的配置
  7. 推荐:国外知名6家大数据领域企业!
  8. ORACLE存储过程使用数组
  9. TT浏览器的收藏夹的问题
  10. mysql my.ini 配置