0

以下の形式のファイルがあります。

#### >>> start of File

Item number - 1
Name xxxx
yyyy
Result PASS

Item number  - 2
Name yyyyy
yyyy
Result FAIL

Item number - 3
NAME ppppp
eeee
rrrrr
Result PASS

#### >>> End of File

Item number今私の質問は、完全なパターンをからResultファイルに抽出するにはどうすればよい ですか? の場合 、パターンのResult PASSを印刷する必要があります。Name

4

4 に答える 4

0

を使用した片道vim。コマンドラインから実行するだけで十分です:

vim -c '

    while 1

        let l_result = search( "\\v\\c^result\\s+pass\\s*$", "W" )

        if l_result == 0
            break
        endif

        let l_name = search( "\\v\\c^name\\s+", "b" )

        let name_l_str = getline( l_name ) 

        call cursor( l_name, 1 ) 

        . write! >> outfile

        call setpos( ".", [0, l_result + 1, 1, 0] )

    endwhile

    q!

' infile

次の結果が得られます。

Name xxxx
NAME ppppp

手順:

  • 結果が「pass」の行を検索します。
  • EOF でないことを確認します。
  • その名前の行を逆方向に検索します。
  • 行の内容を取得します。
  • 名前のある行にカーソルを置きます。
  • 出力ファイルに出力します。
  • 成功した結果行の最後の一致の次の行にカーソルに戻ります
  • ファイルを閉じます。
于 2013-05-31T21:34:23.373 に答える
-1

ファイルが大きすぎず、行数が設定されている場合は、ファイル全体をメモリ内 (配列内) に取り、配列を解析して、前の 4 行を PASS 出力する場所を見つけることができます。

于 2013-05-31T17:01:13.790 に答える