特定のテキストを特定し、その行と次の行を表示する方法

特定のテキストを特定し、その行と次の行を表示する方法

次のようなファイルがあります。

abcdef
123
ghiflk
234
sfhskdhf
483

文字列を検索したいのですが、出力に次の行(および/または前の行)も含める必要があります。

たとえば、

grep "bcd" myfile

Output:
abcdef
123

または前の行を表示します。

grep "ifl" myfile

Output:
123
ghiflk

数日間オンラインで解決策を見つけようとしましたが、見つからないようです。

答え1

GNUおよびBSDユーティリティには、次の行に一致するオプションと前の行に一致するオプションがgrepあります。したがって、次のことができます。-A-B

$ grep -A 1 bcd myfile
abcdef
123

ゲームの終わりにこの行を見せてください。

$ grep -B 1 ifl myfile
123
ghiflk

試合前のラインを示しています。最後に、-C次を使用して一致の前後にN行を表示できます。

$ grep -C 1 ifl myfile
123
ghiflk
234

使用しているバージョンがこの機能をサポートしていない場合は、grepいつでも別の方法を試してみてください。

  • grepPOSIX、sedオプション、およびシェルの使用:

    n=$(grep -n bcd foo | cut -d':' -f1); sed -n "${n},$((n + 1))p" myfile
    
  • AWKを使う

    awk '/bcd/ {print; getline; print}' myfile
    

もっとあります。

答え2

Steven Dが述べたオプションに加えて、GNU grepは、一致する行の前後に印刷する行数を指定する-nオプションの(非文書化)引数を受け入れます。もちろん、-n を使用すると行番号がオンになりますので、行番号が不要な場合は、-A オプションと -B オプションの方が良いでしょう。

たとえば、grep -n1 pattern次のように動作します。grep -n -A1 -B1 pattern


don_crisstiがコメントで述べたように、これはいいえ実際には、このオプションの文書化されていないパラメータです-n-NUM(ここでNUM整数)は実際にoptionの同義語-C NUMなので-nNUM実際の略語です-n -C NUM

関連情報