
[root@localhost ~]# echo "塞纳河饼屋" | awk '{if($1~/^[a-z][a-z][a-z][a-z][a-z][a-z]/) print 1}'
[root@localhost ~]#
我这里没输出,你环境不对!
1
echo " baby go " | awk '{sub("^ ","");sub(" $","");print}'
使用sub替换,结合正则中的限位符^和$即可。
^匹配字符串开头位置,$匹配字符串结尾位置。
结尾的空格有没有去掉,直接这样看不出。可以使用下面的方式测试:
将正则匹配部分放入捕获括号,用gensub替换,例如:
gensub(/a()b/,"\\1",1) 返回值为匹配正则第1对()内的内容
使用其他替换函数可能也能达到类似的效果
#!/bin/bash
awk \
-vfile1="/tmp/udptxt" \
-vfile2="/tmp/sshd_config" \
'BEGIN{
mstr = ""
while(getline<file1>0){
if($0 ~ /^\#udp\(ip\(\"0000\"\) port \(514\)/)
mstr = mstr substr($0, 2) "\n"
else
mstr = mstr $0 "\n"
}
print mstr > file1
mstr = ""
while(getline<file2>0){
if($0 ~ /^\#permit root login yes$/)
mstr = mstr substr($0, 2) "\n"
else
mstr = mstr $0 "\n"
}
print mstr > file2
}'
我不知道你说的那两个文件的路径如何,所以就放了/tmp,你自己可以相应更动。sshd_config那条是删掉#,还是整行删掉?上边code是删掉#,如果要整行删掉,就改成mstr = mstr就好了。
1、“^”是匹配以什么字符或字符串开头的,匹配正确返回1,否则返回0。
2、“$”是匹配以什么字符或字符串结尾的,匹配正确返回1,否则返回0。
3、“”是匹配任意的单个字符,返回正确的为1,否则为0。
4、“[]”是匹配中括号内的任意字符,如果匹配上返回1,否则返回0。
5、“[^]”是匹配不出中括号内的任意字符,正确返回1,否则返回0。
注意事项:
shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
awk 'NR==FNR{a[$1]=$2;next}{if($1 in a)print $0,a[$1]}' file1 file2
或者直接用join
join file2 file1
以上就是关于awk汉字正则匹配全部的内容,包括:awk汉字正则匹配、awk怎么提取空格前的字符、awk如何输出正则匹配的部分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)