Chinaunix

标题: 请教! [打印本页]

作者: huaxue    时间: 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"
作者: DeceitLei    时间: 2007-02-01 15:33
<>不是一行一行的读入吗,那匹配的时候就可以知道是第多少行了
如果文件不大的话,那就读入内存,用列表上下文来做行号的获得
作者: huaxue    时间: 2007-02-01 15:53
有没有更好的方法啊?因为我希望能直接实现两者之间的转化,如果匹配一次就得编列一次,有点麻烦~
嘿嘿,不过还是要感谢你啊!
作者: alexru    时间: 2007-02-01 15:59
grep "pattern" | nl
作者: 福瑞哈哥    时间: 2007-02-01 15:59
perl -ne 'print $. if /pattern/' text # 打印匹配行号
perl -ne 'print if 2...2'  text # 打印text文件第二行
作者: huaxue    时间: 2007-02-01 16:42
我要用perl脚本的形式获得,不知道该怎么弄,这些行号或者行对应的内容都放到一个变量里面,嘿嘿,我不知道上面这种命令行形式该如何改写成脚本形式
作者: ulmer    时间: 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 编辑 ]
作者: 福瑞哈哥    时间: 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 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2