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)
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)
perl を使いたい場合は、次のようにすることができます。
grep "xyz" | perl -p -e 's/(.*)/\1\n/g'
sed を使用したい場合 (より良い結果が得られたようです)、次のようにすることができます
grep "xyz" | sed 's/.*/\0\n/g'
これにより、grep 出力の各行の後に改行が出力されます。
grep "xyz" | perl -pe 'print "\n"'
これにより、異なるファイルからの結果の間に改行が出力されます。(読みながら質問に答えています。)
grep 'xyx' * | perl -pe '/(.*?):/; if ($f ne $1) {print "\n"; $f=$1}'
ステート マシンを使用して、空白行を出力するタイミングを決定します。
#!/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