CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

awk如何匹配以#开头的字符串?

楼主universes(及时揭帖是一种美德 | CSDN也这么黑)2005-11-16 18:58:26 在 Linux/Unix社区 / 程序开发区 提问

我想在一个文件里依次读入一行,如果这行以#开头就将其忽略。  
  我写的语句如下:  
  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

相关问题

  • 字符串匹配问题
  • 字符串匹配函数?
  • 字符串匹配问题
  • 模糊搜索:长字符串匹配短字符串
  • [300’]求一字符串匹配算法!
  • 字符串模糊匹配的函数?
  • 怎样对字符串匹配??
  • 字符串近似匹配问题
  • 请教字符串匹配程序
  • 字符串匹配的问题

关键词

  • 字符
  • 脚本
  • 字符串
  • awk
  • 开头
  • 匹配
  • 大虾
  • cat
  • filename
  • 不行

得分解答快速导航

  • 帖主:universes
  • bekars
  • fytzzh
  • qtj

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo