关于shell编程(3):awk中的sub和gsub |
您所在的位置:网站首页 › awk是什么语言 › 关于shell编程(3):awk中的sub和gsub |
sub和gsub的区别 awk '{sub(/aa/,"cc");print}' file 用cc替换aa awk '{sub(/aa/,"cc",$1); print}' file 第一个域内用cc替换aa 把上面sub换成gsub就表示在满足条件的域里面替换所有的字符。 比如如下文件内容: aa我们 aa我们 aaaa一起 aaaa一起 回家 aa回家使用上述的awk的sub的第一种2个参数的用法,可以得到如下结果 cc我们 aa我们 #只改变坐起第一个aa ccaa一起 aaaa一起 回家 cc回家 #第一个字段中没有aa,就继续寻找下一个字段,直到找到第一个aa并替换使用sub的第二种3参数用法,结果如下 cc我们 aa我们 ccaa一起 aaaa一起 回家 aa回家 #第一个字段中没有aa直接结束本行的替换如果使用gsub,得到的结果分别如下 #不加$1 cc我们 cc我们 cccc一起 cccc一起 #全部替换 回家 cc回家 #添加$1 cc我们 aa我们 cccc一起 aaaa一起 回家 aa回家 #第一个域内全部替换,其他域不管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 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |