gsub函数则使得在所有正则表达式被匹配的时候都发生替换

gsub(regular expression, subsitution string, target string);简称 gsub(r,s,t)

一、遇到的问题:

问题:echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'为啥 输出后 2011-11-22 变成 2 了?

解答:

gsub(/-/,"",$4)的值是2【在赋值的情况下是这样的~】,你将2赋值给$4 ,gsub返回的是替换的次数。

如下是测试结果:

[root@Test230 ~]# echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'

a b c 2 a:d

看另一种情况,只是替换的话~

[root@sor-sys config]# echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"",$4)'

a b c 20111122 a:d

[root@sor-sys config]# echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"_",$4)'

a b c 2011_11_22 a:d

二。实例详解

下面我们来总结一下这个gsub的用法:

有一个文本文件data.test的内容如下:

0001|20081223efskjfdj|EREADFASDLKJCV

0002|20081208djfksdaa|JDKFJALSDJFsddf

0003|20081208efskjfdj|EREADFASDLKJCV

0004|20081211djfksdaa1234|JDKFJALSDJFsddf

以'|'为分隔, 现要将第二个域字母前的数字去掉,其他地方都不变, 输出为:

0001|efskjfdj|EREADFASDLKJCV

0002|djfksdaa|JDKFJALSDJFsddf

0003|efskjfdj|EREADFASDLKJCV

0004|djfksdaa1234|JDKFJALSDJFsddf

解法:

awk -F '|' 'BEGIN{ OFS="|" } {sub(/[0-9]+/,"",$2);print $0}' data.test

awk -F '|' -v OFS='|' '{sub(/[0-9]+/,"",$2);print $0}' data.test

三。sub和gsub的区别

sub匹配第一次出现的符合模式的字符串,相当于 sed 's//' 。

gsub匹配所有的符合模式的字符串,相当于 sed 's//g' 。

例如:

awk '{sub(/Mac/,"Macintosh");print}' urfile 用Macintosh替换Mac

awk '{sub(/Mac/,"MacIntosh",$1); print}' file 第一个域内用

Macintosh替换Mac

把上面sub换成gsub就表示在满足条件得域里面替换所有的字符。

awk的sub函数用法:

sub函数匹配指定域/记录中最大、最靠左边的子字符串的正则表达式,并

用替换字符串替换这些字符串。

如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配

的时候。格式如下:

sub (regular expression, substitution string):

sub (regular expression, substitution string, target string)

实例:

$ awk '{ sub(/test/, "mytest"); print }' testfile

$ awk '{ sub(/test/, "mytest", $1); print }' testfile

第一个例子在整个记录中匹配,替换只发生在第一次匹配发生的时候。

第二个例子在整个记录的第一个域中进行匹配,替换只发生在第一次匹配

发生的时候。

如要在整个文件中进行匹配需要用到gsub

gsub函数作用如sub,但它在整个文档中进行匹配。格式如下:

gsub (regular expression, substitution string)

gsub (regular expression, substitution string, target string)

实例:

$ awk '{ gsub(/test/, "mytest"); print }' testfile

$ awk '{ gsub(/test/, "mytest", $1); print }' testfile

第一个例子在整个文档中匹配test,匹配的都被替换成mytest。

第二个例子在整个文档的第一个域中匹配,所有匹配的都被替换成mytest

另外, 只有当记录中的域有改变的时候 ,指定0FS变量才有用, 如果记

录中的域无变化, 指定OFS产生不了实际效果。

awk -F'|' -v OFS='|' '{ gsub(/[0-9]/, "", $3); print $0; }'

data.txt

将把第三个域中所有数字都去掉。

另外,对于数字的匹配,可以使用十六进制。

awk -F'|' -v OFS='|' '{ gsub(/[/x30-/x39]/, "", $3); print $0; }'

data.txt

转载于:https://blog.51cto.com/zlong37/1567666

linux中awk下 gsub函数用法相关推荐

  1. Linux中gsub函数,Linux中awk下 gsub函数用法

    一.遇到的问题: 问题:echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'为啥 输出后 2011-11 ...

  2. linux中c语言kbhit函数用法,检测按键(Linux中kbhit()函数的实现)

    编写过MS-DOS程序的人通常都会查找Linux下等同于kbhit的函数,这个函数会检测一个按键是否被按下而并不实际的读取.不幸的是他们并没有找到这样的函数,因为并没有直接等同的函数.Unix程序员并 ...

  3. linux中c语言kbhit函数用法,linux下kbhit()函数 getch函数。

    对于上面的问题,都用到 linux下的getch函数与kbhit函数. 参考了http://kpld8888.wordpress.com/2007/03/07/linux%E4%B8%8B%E7%9A ...

  4. linux中c语言kbhit函数用法,C语言判断用户是否输入-非阻塞函数kbhit

    一.基础研究 要从地址读取数据,肯定是要定义一个指针变量p,用它来实现变换地址和取值的功能.另外程序是当两个条件中的某一个出现时才停止,所以应该用while~do循环语句循环输出n和d,并用while ...

  5. LINUX下poll函数用法

    LINUX下poll函数用法 文章目录 LINUX下poll函数用法 一.函数介绍 二.使用 1. 一.函数介绍 int poll(struct pollfd *fds, nfds_t nfds, i ...

  6. linux之getcwd函数解析,Linux 中C语言getcwd()函数的用法

    Linux 中C语言getcwd()函数的用法 先来看该函数的声明: #include char *getcwd(char *buf,size_t size); 介绍: 参数说明:getcwd()会将 ...

  7. Linux中awk后面的RS, ORS, FS, OFS 用法

    Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义"行"呢?这就是RS的作用.   ...

  8. linux中awk命令_Linux / Unix中的AWK命令

    linux中awk命令 AWK is suitable for pattern search and processing. The script runs to search one or more ...

  9. linux常用工具awk,linux中awk工具

    awk sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件.awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义, ...

最新文章

  1. wxPython:Python首选的GUI库 | CSDN博文精选
  2. python 解析 配置文件
  3. virt-manager 的桥接网络配置问题
  4. 获取treeview中当前鼠标所指的节点treenode 。
  5. ajax 传递参数中文乱码解决办法
  6. 定义jQuery插件
  7. python 参数收集_Python参数传递及收集机制原理解析
  8. bootstrap - navbar
  9. 朴素贝叶斯算法+模型的评价-查准率、召回率、F1-score及混淆矩阵(code实现)
  10. 区块链开发区块链架构与应用PPT
  11. 南京大学计算机系副教授名单,2018年度国际“人工智能10大新星”名单公布:南京大学俞扬副教授国内高校入选者...
  12. 沪深300成分股分析
  13. python 取名字_个人儿子叫派森,用python程序化取名字,他管这叫爹?
  14. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
  15. Vue+SpringBoot+ElementUI实战学生管理系统-9.教师管理模块
  16. 编写程序数一下 1到 100 的所有整数中出现多少次数字9_C语言编写
  17. 教你科学实施有氧运动
  18. Python必学脚本 #入门到成神#(持续更新)
  19. android上hdmi投屏TV未铺满,让4K电视满血重生 手机投屏体验比一比
  20. android 带手电筒的扫一扫(1 可以自动打开手电筒,2 可以自动对焦,增加识别率)

热门文章

  1. mysql如何查看事务日记_MySQL中的几种日志了解
  2. android标题栏添加按钮_改善Android布局性能
  3. mysql导入600万数据_mysql如何导出600万条记录的数据表?
  4. python 加载动图_在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...
  5. php url模式在哪修改,php如何修改url
  6. 河科大c语言上机实验答案,2016年河南科技学院信息工程学院C语言上机编程考研复试题库...
  7. 安卓饼状图设置软件_话单及银行卡交易智能分析软件
  8. 华为服务器引入清空外部配置文件,云服务器还原配置文件
  9. java报错MalformedURLException: unknown protocol: c
  10. 初始化Mysql系统报错,begin failesd--conpilation aborted at scripts........