ファイル内の文字列を検索したいが末尾の改行で終わらない行の一致を無視します。つまり、ファイルの最後の行が改行で終わらない場合は無視したいと思います。
これを行う最良の方法は何ですか?
subprocess
処理する前に、大きなテキストログファイルをフィルタリングするためにモジュールを介してgrepを呼び出すPythonスクリプトでこの問題が発生しました。ファイルの最後の行が記録されている可能性があり、その場合はその行を処理したくありません。
ベストアンサー1
使用gawk
(EREのようなものを使用grep -E
):
gawk '/pattern/ && RT' file
RT
in には、gawk
レコード区切り文字に一致するコンテンツが含まれます。RS
デフォルト値RS
(\n
)を使用すると、最後に\n
区切られていないレコードを除いて、レコードRT
は空です。
使用perl
(使用可能なものと同様のPerl RE grep -P
):
perl -ne 'print if /pattern/ && /\n\z/'
gawk
grep
またはとは異なり、perl
デフォルトは文字ではなくバイトに適用されます。たとえば、.
正規表現演算子は、UTF-8でエンコードされた2バイトのそれぞれと一致します£
。ロケールの文字定義(例:awk
/)に従って文字を処理するには、次のようにgrep
します。
perl -Mopen=locale -ne 'print if /pattern/ && /\n\z/'