awk如何匹配以#开头的字符串?
我想在一个文件里依次读入一行,如果这行以#开头就将其忽略。
我写的语句如下:
cat /filename | awk 'BEGIN {i=0}{if("$1"!~/#*/) i+=1} END {print i}'
~~~~~~~~~~
我写这个语句的本意是:如果第一个域不是以#开头的话 i就加1。if里面我的本意是用正则表达式来做。
我将/#*/认为是以#开头的字符串
但是结果不对:(
小弟新学shell 编程,忘大虾赐教!
问题点数:50、回复次数:6Top
1 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2005-11-16 19:27:52 得分 0
呵呵,自己搞定了:
cat /filename | awk 'BEGIN {i=0}{if("$1"!^/\#/) i+=1} END {print i}'
~~~~~~~~~~~~
只不过这只是匹配行首
这样:
cat /filename | awk 'BEGIN {i=0}{if("$1"!/\#*/) i+=1} END {print i}'
~~~~~~~~~~我想用*代表任意字符串,但是不行:(
哪位大虾指点一下?我明天来揭帖Top
2 楼bekars(涡轮增压:没有解决不了的问题,因为根本就没有问题)回复于 2005-11-16 23:42:42 得分 20
cat ./filename | awk 'BEGIN {i=0}{if($1 !~ /^#/) i+=1} END {print i}'
这个脚本应该这样写Top
3 楼bekars(涡轮增压:没有解决不了的问题,因为根本就没有问题)回复于 2005-11-16 23:44:05 得分 0
!~ 不匹配
^# 以#开头字符串Top
4 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2005-11-17 08:36:30 得分 0
多谢!
但是我原来也是按你的脚本,但是错了。#也要加一个转义字符\。
我的那个脚本也写错了,不好意思,笔误:
cat /filename | awk 'BEGIN {i=0}{if("$1"!^/\#/) i+=1} END {print i}'
~~~~
cat /filename | awk 'BEGIN {i=0}{if("$1"!/^\#/) i+=1} END {print i}'
~~~~
filename您说的是对的,我这里只是作为一个例子,我的这个filename是一个全路径
现在我想问的是用*为什么不行?:
cat /filename | awk 'BEGIN {i=0}{if("$1"!/\#*/) i+=1} END {print i}'
~~~~~~~~~~我想用*代表任意字符串,但是不行:(
多谢大虾指点!
Top
5 楼fytzzh(我爱summer)回复于 2005-11-22 14:29:22 得分 10
用if (substr($1, 1, 1) == "#")判断不就可以了么!!!
Top
6 楼qtj(qtj)回复于 2005-12-15 13:38:16 得分 20
正则表达式:/\#*/,它是意思是匹配0或多个字符"#",这里"*"的含义和DOS下文件匹配的"*"的含义不一样.这里的意思是"0或多个前面的字符".而不是"0或多个字符",把:/\#*/改成:/\#.*/应该可以了.Top




