免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Perl 请教!
最近访问板块 发新帖
查看: 1717 | 回复: 7
打印 上一主题 下一主题

请教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-01 15:22 |只看该作者 |倒序浏览
我在一个文件中匹配一行,怎样可以得到该行的行号?
还有通过行号,怎么知道该行的内容。

file :
      1 [FORMATTED_OUTPUT_CONVERSION_FUNCTION]
      2 printf,1
      3 fprintf,2
      4 sprintf,2
      5
      6 [MEMORY_COPY_CHECK_FUNCTION]
      7 memcpy, 3
      8 memmove, 3
      9 memccpy,4
     10
例如,我匹配字符串"[MEMORY_COPY_CHECK_FUNCTION]",想知道该行所在的行号6;
或者我想知道第7行相对应的内容,这里就是对应"memcpy, 3"

论坛徽章:
0
2 [报告]
发表于 2007-02-01 15:33 |只看该作者
<>不是一行一行的读入吗,那匹配的时候就可以知道是第多少行了
如果文件不大的话,那就读入内存,用列表上下文来做行号的获得

论坛徽章:
0
3 [报告]
发表于 2007-02-01 15:53 |只看该作者
有没有更好的方法啊?因为我希望能直接实现两者之间的转化,如果匹配一次就得编列一次,有点麻烦~
嘿嘿,不过还是要感谢你啊!

论坛徽章:
0
4 [报告]
发表于 2007-02-01 15:59 |只看该作者
grep "pattern" | nl

论坛徽章:
0
5 [报告]
发表于 2007-02-01 15:59 |只看该作者
perl -ne 'print $. if /pattern/' text # 打印匹配行号
perl -ne 'print if 2...2'  text # 打印text文件第二行

论坛徽章:
0
6 [报告]
发表于 2007-02-01 16:42 |只看该作者
我要用perl脚本的形式获得,不知道该怎么弄,这些行号或者行对应的内容都放到一个变量里面,嘿嘿,我不知道上面这种命令行形式该如何改写成脚本形式

论坛徽章:
0
7 [报告]
发表于 2007-02-01 16:49 |只看该作者

回复 1楼 huaxue 的帖子

Perl has special variable "$." treated as line  number in a file.
while (<>) {
    if (/\[MEMORY_COPY_CHECK_FUNCTION\]/) {
        print "matched line number: $.\n";
    }
    if ($. == 7) {
        print "line 7: ", $_, "\n";
    }   
}



TIPS & TRICKS:
perl simulates unix grep -n 'PATTERN' <FIEL>
perl -ne 'print "$ARGV:$.:$"_ if /PATTERN/;' <FILE>
i.e.:
perl -ne 'print "$ARGV:$.:$_" if /HOME/;' /etc/*.conf


--ulmer

[ 本帖最后由 ulmer 于 2007-2-1 16:52 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-02-01 16:54 |只看该作者
原帖由 huaxue 于 2007-2-1 16:42 发表
我要用perl脚本的形式获得,不知道该怎么弄,这些行号或者行对应的内容都放到一个变量里面,嘿嘿,我不知道上面这种命令行形式该如何改写成脚本形式


  1. while (<>) {
  2.     $line_number_you_need = $. if /pattern/;
  3.     $spec_line_you_need = $_ if 2..2;
  4. }
复制代码

基本上已经很清楚了啊。

[ 本帖最后由 福瑞哈哥 于 2007-2-1 17:04 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP