Numbering lines matching the pattern using sed

前端 未结 6 1967
一生所求
一生所求 2021-02-01 06:59

I\'m writing the script that searches for lines that match some pattern. I must use sed for this script. This works fine for searching and printing matched lines:



        
相关标签:
6条回答
  • 2021-02-01 07:32

    Here's the simplest way:

    awk '{print ln++  ":  "  $0 }' 
    
    0 讨论(0)
  • 2021-02-01 07:33

    For sed, use following to get line number

    sed -n /PATTERN/= 
    
    0 讨论(0)
  • 2021-02-01 07:37

    Using Perl:

    perl -ne 'print "$.: $_" if /regex/' input.file
    

    $. contain line number. If input file contains:

    record foo
    bar baz
    record qux
    

    This one-liner: perl -ne 'print "$.: $_" if /record/' input.file will print:

    1: record foo
    3: record qux
    

    Or if you just want total number of lines matched a pattern use:

    perl -lne '$count++ if /regex/; END { print int $count }' input.file

    0 讨论(0)
  • 2021-02-01 07:38

    You can use grep:

    grep -n pattern file
    

    If you use = in sed the line number will be printed on a separate line and is not available in the pattern space for manipulation. However, you can pipe the output into another instance of sed to merge the line number and the line it applies to.

    sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'
    
    0 讨论(0)
  • 2021-02-01 07:47

    Switch to awk.

    BEGIN {
      ln=0
    }
    
    $0 ~ m {
      ln+=1
      print ln " " $0
      next
    }
    
    {
      print $0
    }
    

    ...

    awk -f script.awk -v m='<regex>' < input.txt
    
    0 讨论(0)
  • 2021-02-01 07:48

    = is used to print the line number.

    sed -n /PATTERN/{=;p;}
    
    0 讨论(0)
提交回复
热议问题