grep
複数の行を読み取ることができないため、この仕事にはあまり適していません。-B1と組み合わせて読み取ることもできますが、などのより強力なツールを使用して解析するsed
必要awk
があります。
これは、ラインの前にエクストラニューが発生した場合にも機能する別のアプローチです(ドライランecho
できるようにするためにそこにあります)。
$ echo 'Before starting transaction id = 123
After starting transaction id = 123
After starting transaction id = 54675
Before starting transaction id = 567
After starting transaction id = 567' |
sort -k6 | uniq -u -f5 # end cmd
After starting transaction id = 54675
一意のIDのみをチェックすることで機能します。そこにどのようなコンテンツが入っているのかわからないので、既存のエントリと重複している可能性があります。その場合は、別の方法で行う必要があります。これがより安全なアプローチです。これは、両方のケースをキャッチし、ID頻度が2より多いまたは少ないオカレンスを返します。
$ echo 'Before starting transaction id = 123
After starting transaction id = 123
After starting transaction id = 567
Before starting transaction id = 567
After starting transaction id = 567' |
sort -k6 | uniq -c -f5 | grep -v "^[[:space:]]*2[[:space:]]"
3 After starting transaction id = 567