代わりに、特定の線のパターン

代わりに、特定の線のパターン

ファイルから複数行のパターンを検索する方法を探しています。

たとえば、次の数値リストが入力ファイルであるとします。

3
2
5
4
8
2
5
4
2
4
2
5
4

2-4行(含む)のインスタンスを検索する場合、結果は次のようになります。

3

これは、特定の行が繰り返される正確な回数であるためです。また、ファイル内の特定の行数と行番号の特定の範囲を処理できるようにしたいです。

ベストアンサー1

使用できるpcregrep、ほとんどのディストリビューションで利用可能です。次のコマンドは固定文字列と一致します。

pcregrep -Mc '^2\n5\n4$' input.txt

説明する

マニュアルページでは、pcregrepは「Perl互換正規表現を使用したgrep」です。

  • -M:複数行の正規表現の一致
  • -c:一致自体ではなく一致数(count)を出力します。
  • ^2\n5\n4$:それぞれ別々の行に2、5、4の正規表現。

代わりに、特定の線のパターン

質問の後続のコメントは、一致するパターンが固定文字列ではなく、一般的な「2行目から4行目」であることを示唆しています。ここでは、コマンド置換を使用して入力ファイルの行を解析できます。

pcregrep -Mc "^\Q$(sed -n 2,4p input.txt)\E$" input.txt

説明する

  • tail -n+2 input.txt:出力ファイル、ライン2から始まる
  • head -n3:最初の3行のみ出力
  • \Q...\E:引用する正規表現一致ではなく、デフォルトの文字列一致...(コマンドの出力に対応する項目が含まれていないと仮定\E)。

replacement( )sed ... input.txtコマンドが削除されるため、出力の最後の数行は空ではないと仮定します。$(...)みんな末尾の改行文字。

おすすめ記事