grepが改行なしで行を無視するようにする方法

grepが改行なしで行を無視するようにする方法

ファイル内の文字列を検索したいが末尾の改行で終わらない行の一致を無視します。つまり、ファイルの最後の行が改行で終わらない場合は無視したいと思います。

これを行う最良の方法は何ですか?

subprocess処理する前に、大きなテキストログファイルをフィルタリングするためにモジュールを介してgrepを呼び出すPythonスクリプトでこの問題が発生しました。ファイルの最後の行が記録されている可能性があり、その場合はその行を処理したくありません。

ベストアンサー1

使用gawk(EREのようなものを使用grep -E):

gawk '/pattern/ && RT' file

RTin には、gawkレコード区切り文字に一致するコンテンツが含まれます。RSデフォルト値RS\n)を使用すると、最後に\n区切られていないレコードを除いて、レコードRTは空です。

使用perl(使用可能なものと同様のPerl RE grep -P):

perl -ne 'print if /pattern/ && /\n\z/'

gawkgrepまたはとは異なり、perlデフォルトは文字ではなくバイトに適用されます。たとえば、.正規表現演算子は、UTF-8でエンコードされた2バイトのそれぞれと一致します£。ロケールの文字定義(例:awk/)に従って文字を処理するには、次のようにgrepします。

perl -Mopen=locale -ne 'print if /pattern/ && /\n\z/'

おすすめ記事