0

3 つの異なるパターンがあり、どのパターンがファイルに最初に表示され、どの親がファイルに最後に表示されるかを調べたいので、最初と最後のパターンを含む行も印刷する必要があります。

私は以下のgrepを試しましたが、1つのパターンにのみ適用されます。パターンのランクを見つける方法を見つけたら、「tac」を使用して同じロジックで最後のパターンを印刷できると思います。

grep -m 1 "pattern1" test.txt

私の3パターンは

1.PATTERN1  
2.PATTERN2  
3.PATTERN3  

Line1 this is a sample line for example without  any meaning please ignore
Line2 only meant for giving an example PATTERN2 to make my query clear to all
Line3 this is a sample line for example without  any meaning please ignore
Line4 only meant for giving an example pattern1 to make my query clear to all
Line5 this is a sample line for example without  any meaning please ignore
Line6 only meant for giving an example pattern1 to make my query clear to all
Line7 this is a sample line for example without  any meaning please ignore
Line8 only meant for giving an example pattern2 to make my query clear to all
Line9 this is a sample line for example without  any meaning please ignore
Line10 only meant for giving an example pattern3 to make my query clear to all
Line11 only meant for giving an example pattern1 to make my query clear to all

PATTERN1、PATTERN2、PATTERN3 のいずれかのパターンの最初の出現を含む行を印刷したいと考えています。

したがって、望ましい出力は次のようになります。

First pattern among the three
-------------------------------
Line2 only meant for giving an example PATTERN2 to make my query clear to all

Last instance amoung the three:
-------------------------------
Line11 only meant for giving an example pattern1 to make my query clear to all
4

2 に答える 2

2

あなたは言うことができます:

grep -E -m1 "pattern1|pattern2|pattern3" test.txt

pattern1これにより、 、pattern2またはのいずれかに一致する最初の行が出力されますpattern3

あなたが述べたようtacに、ファイル内で最後に一致するパターンを見つけるために使用できます。

grep -E -m1 "pattern1|pattern2|pattern3" <(tac test.txt)

のバージョンが をgrepサポートしていない場合は、次の-Eように言えます。

grep -m1 "pattern1\|pattern2\|pattern3" test.txt

編集: 任意のパターンに一致する最初の行と行のみを見つけるために、次のように言うことができます:

grep "pattern1\|pattern2\|pattern3" test.txt | sed -n '1p;$p'

(大文字と小文字を区別しない一致を実行する場合は、-iオプション for を使用します。)grep

于 2013-09-30T14:02:20.133 に答える