在awk中 sub函数 和 gsub函数 的区别
简单说就是正则加g和不加g的效果, sub匹配每行第一个,gsub匹配每行所有
在Awk中,sub函数和gsub函数都是用于字符串替换的函数,但它们之间存在一些区别。
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
都用于进行字符串替换操作,但它们在替换范围上有所不同。
sub
函数:
sub
函数用于在字符串中进行一次替换操作。sub(/pattern/, "replacement", string)
gsub
函数:
gsub
函数用于在字符串中进行全局替换操作。gsub(/pattern/, "replacement", string)
总结一下:
sub
只替换第一个匹配到的模式,而gsub
会替换所有匹配到的模式。sub
函数;如果需要替换所有匹配项,则使用gsub
函数。需要注意的是,在使用sub
和gsub
函数时,它们会直接修改传递给它们的字符串参数,而不是返回一个新的字符串。因此,在进行替换操作后,原始字符串将被修改。如果你希望保留原始字符串的副本,可以在传递给函数之前先复制一份。
awk
中的sub
和gsub
函数都用于字符串替换操作,但它们之间有一些区别:
替换范围:
sub
函数只替换字符串中的第一个匹配项。它在找到第一个匹配后停止,并返回替换后的字符串。gsub
函数会替换字符串中的所有匹配项。它会继续搜索并替换字符串中的每个匹配项,直到整个字符串都被处理完毕。返回值:
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