当前位置: 首页 > article >正文

在awk中 sub函数 和 gsub函数 的区别

在awk中 sub函数 和 gsub函数 的区别

简单说就是正则加g和不加g的效果, sub匹配每行第一个,gsub匹配每行所有

在Awk中,sub函数和gsub函数都是用于字符串替换的函数,但它们之间存在一些区别。

  1. sub函数:
    sub函数用于替换字符串中的第一个匹配项。它的语法如下:
sub(regexp, SubstitutionReplacement, target)

其中,regexp是用于匹配正则表达式的模式,replacement是要替换的字符串,target是要进行替换操作的字符串。
示例:

echo "Hello World, Hello World" | awk '{ sub("World", "Universe", $0); print }'

输出: (只替换了第一个匹配)

Hello Universe, Hello World

在上述示例中,sub函数将字符串"World"替换为"Universe",只替换第一个匹配项。
2. gsub函数:
gsub函数用于替换字符串中的所有匹配项。它的语法如下:

gsub(regexp, SubstitutionReplacement, target)

其中,regexp是用于匹配正则表达式的模式,replacement是要替换的字符串,target是要进行替换操作的字符串。
示例:

echo "Hello World, Hello World" | awk '{ gsub("World", "Universe", $0); print }'

输出:(所有匹配都替换了)

Hello Universe, Hello Universe

放一起对比

[u@fedora txt]$ echo "Hello World, Hello World" | awk '{ sub("World", "Universe", $0); print }'
Hello Universe, Hello World
[u@fedora txt]$ echo "Hello World, Hello World" | awk '{ gsub("World", "Universe", $0); print }'
Hello Universe, Hello Universe

在上述示例中,gsub函数将字符串"World"替换为"Universe",替换所有匹配项。
总结:
sub函数只替换字符串中的第一个匹配项,而gsub函数则替换字符串中的所有匹配项。因此,根据具体的需求选择适当的函数来执行字符串替换操作。

在awk中 sub函数 和 gsub函数 的区别

awk中,subgsub都用于进行字符串替换操作,但它们在替换范围上有所不同。

  1. sub函数:

    • sub函数用于在字符串中进行一次替换操作。
    • 它只替换第一个匹配到的模式,并且不会继续搜索或替换其他匹配项。
    • 示例:sub(/pattern/, "replacement", string)
  2. gsub函数:

    • gsub函数用于在字符串中进行全局替换操作。
    • 它会替换所有匹配到的模式,而不仅仅是第一个匹配项。
    • 示例:gsub(/pattern/, "replacement", string)

总结一下:

  • sub只替换第一个匹配到的模式,而gsub会替换所有匹配到的模式。
  • 如果你只想替换第一个匹配项,可以使用sub函数;如果需要替换所有匹配项,则使用gsub函数。

需要注意的是,在使用subgsub函数时,它们会直接修改传递给它们的字符串参数,而不是返回一个新的字符串。因此,在进行替换操作后,原始字符串将被修改。如果你希望保留原始字符串的副本,可以在传递给函数之前先复制一份。

awk中的subgsub函数都用于字符串替换操作,但它们之间有一些区别:

  1. 替换范围:

    • sub函数只替换字符串中的第一个匹配项。它在找到第一个匹配后停止,并返回替换后的字符串。
    • gsub函数会替换字符串中的所有匹配项。它会继续搜索并替换字符串中的每个匹配项,直到整个字符串都被处理完毕。
  2. 返回值:

    • sub函数返回替换后的字符串。你可以将结果赋值给一个变量或直接打印出来。
    • gsub函数直接修改原始字符串,不返回新的字符串。它会在原始字符串中进行替换操作,因此你可以直接查看或操作修改后的原始字符串。

下面是一个示例来说明它们的区别:

假设有一个字符串"aaa aaa aaa aaa",我们想要将其中的"aaa"替换为"bbb"。

使用sub函数:

echo "aaa aaa aaa aaa" | awk '{ sub(/aaa/, "bbb"); print }'

输出:

bbb aaa aaa aaa

使用gsub函数:

echo "aaa aaa aaa aaa" | awk '{ gsub(/aaa/, "bbb"); print }'

输出:

bbb bbb bbb bbb

实例

[user@fedora txt]$ echo "aaa aaa aaa aaa" | awk '{ sub(/aaa/, "bbb"); print }'
bbb aaa aaa aaa
[user@fedora txt]$ echo "aaa aaa aaa aaa" | awk '{ gsub(/aaa/, "bbb"); print }'
bbb bbb bbb bbb

http://www.kler.cn/news/148633.html

相关文章:

  • Docker 运行 Oracle Autonomous Database Free Container
  • Android虚拟化
  • [机缘参悟-120] :计算机世界与佛家看世界惊人的相似
  • 数据提取PDF SDK的对比推荐
  • 443. 压缩字符串
  • 编程语言发展史:量子计算编程语言的应用和前景
  • 机器学习之决策树及随机森林
  • 吴恩达《机器学习》10-6-10-7:学习曲线、决定下一步做什么
  • 虚幻学习笔记6—摄像机控制
  • 外包干了2个月,技术退步明显了...
  • 基于Tomcat+Eclipse+Mysql开发的图书信息管理系统
  • pandas教程:MovieLens 1M Dataset MovieLens 1M数据集
  • HbuilderX 项目打包文件过大问题优化
  • Postgresql数据库运维统计信息
  • 西南科技大学电路分析基础实验A1(一阶电路的设计)
  • 【Go语言从入门到实战】反射编程、Unsafe篇
  • unity3d NPC寻路时相互挤压、导致离目标越来越远
  • mysql数据库基础知识,Mysql的索引和主键区别,数据库的事务的基本特性
  • redis key
  • Element-UI Upload 手动上传文件的实现与优化
  • 爬楼梯(力扣LeetCode)动态规划
  • Win7 SP1 x64 Google Chrome 字体模糊
  • android系统新特性——用户界面以及系统界面改进
  • 记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查
  • Vue项目实战之一----实现分类弹框效果
  • 【华为OD题库-037】跳房子2-java
  • Vue组件实战:列表组件开发
  • AIGC系列之:CLIP和OpenCLIP
  • Kubernetes异常排查方式
  • 【Linux】coredump 文件的例子分析