1

grep の結果ごとに空白行を追加する方法は?

たとえば、grep -o "xyz" は次のようになります。

file1:xyz
file2:xyz
file2:xyz2
file3:xyz

出力を次のようにしたい-

file1:xyz

file2:xyz
file2:xyz2

file3:xyz

私は次のようなことをしたいと思います

grep "xyz" | perl (code to add a new line after every grep result)
4

4 に答える 4

1

perl を使いたい場合は、次のようにすることができます。

grep "xyz" | perl -p -e 's/(.*)/\1\n/g'

sed を使用したい場合 (より良い結果が得られたようです)、次のようにすることができます

grep "xyz" | sed 's/.*/\0\n/g'
于 2013-07-23T16:23:45.273 に答える
1

これにより、grep 出力の各行の後に改行が出力されます。

grep "xyz" | perl -pe 'print "\n"'

これにより、異なるファイルからの結果の間に改行が出力されます。(読みながら質問に答えています。)

grep 'xyx' * | perl -pe '/(.*?):/; if ($f ne $1) {print "\n"; $f=$1}'
于 2013-07-23T16:16:13.417 に答える
0

ステート マシンを使用して、空白行を出力するタイミングを決定します。

#!/usr/bin/env perl

use strict;
use warnings;

# state variable to determine when to print a blank line
my $prev_file = '';

# change DATA to the appropriate input file handle
while( my $line = <DATA> ){

  # did the state change?
  if( my ( $file ) = $line =~ m{ \A ([^:]*) \: .*? xyz }msx ){

    # blank lines between states
    print "\n" if $file ne $prev_file && length $prev_file;

    # set the new state
    $prev_file = $file;
  }

  # print every line
  print $line;
}

__DATA__
file1:xyz
file2:xyz
file2:xyz2
file3:xyz
于 2013-07-23T17:02:54.743 に答える