Добавить разрывы строк в команды Grep

Используйте perl.

#!/usr/bin/perl

use strict;
use warnings;

my %words_to_find;

open ( my $input, "<", "/tmp/10218.after" );
while ( my $line = <$input> )
{
  my ( $word ) = ( $line =~ m/\A(\S+)\s/ );
  $words_to_find{$word}++;
}
close ( $input );

open ( my $search, "<", "/tmp/10218.before" ); 
while ( my $line = <$search> )
{
  foreach my $word ( key %words_to_find )
  { 
    if ( $line =~ m/$word/ )
    {
      print $line;
      last;
    }
  }
}
close ( $search );

Что-то вроде этого должно помочь.

0
13.03.2019, 14:49
2 ответа

Кажется, это работает. Я не уверен, есть ли более простой способ сделать это:

grep OpenFin LoginExInternal.txt >> LoginExcInternal.txt && 
echo $'\r' >> LoginExcInternal.txt && 
grep Chrome LoginExInternal.txt >> LoginExcInternal.txt &&
echo $'\r' >> LoginExcInternal.txt &&
grep MemoryUnderThreshold.txt memoryInfo:jsHeapSizeLimit:1 >> LoginExcInternal.txt
0
28.01.2020, 02:30

Вам не нужно использовать catс grep, и вы можете сгруппировать команды, чтобы поместить туда перенаправление только один раз:

{
  grep OpenFin < LoginExInternal.txt && echo 
  grep Chrome < LoginExInternal.txt && echo
  grep memoryInfo:jsHeapSizeLimit:1 < MemoryUnderThreshold.txt && echo
} >> LoginExcInternal.txt

Также обратите внимание, что если вы объедините все команды с помощью &&, то сбой grep остановит выполнение следующих echo, а также остальных greps. Это может быть или не быть тем, что вы хотите. Использование только grep && echo, как указано выше, приведет к запуску всех grepв любом случае, но печатать дополнительные новые строки только тогда, когда grepсоответствует чему-то.

Кроме того, я не совсем уверен, как обрабатываются разрывы строк в cygwin, то есть требуется ли явный вывод возврата каретки $'\r'.

2
28.01.2020, 02:30

Теги

Похожие вопросы