正規表現でLF文字を処理するためにGNU grep 2.12を取得できません

正規表現でLF文字を処理するためにGNU grep 2.12を取得できません

私はこれを1時間以上調べてきましたが、なぜ動作しないのかわかりません。

HTML文書で「\nSome text」を検索しています。十分簡単です。

しかし、彼が実行したコマンドは機能しません。

grep -Po '(?s)<h2>\nSome text' input.html > output.html
grep -Po '(?s)<h2>\\nSome text' input.html > output.html

grepのデフォルトの正規表現エンジンは複数行をサポートしていないため、「-P」スイッチが必要です。

私は何をもっと試すべきかわかりません。どんなアイデアがありますか?

ありがとうございます。

- 編集:入力ファイルには次の項目のみが含まれます。

<h2>LF (ie. \n)
Some text

ベストアンサー1

改行(したがって複数行)を一致させるには2つの方法が必要ですgrep。以下を使用してください。

  • -zgrep改行の代わりにASCII NULで行を区切る最新のGNUオプション

  • (?s)DOTALL修飾子(grep -P)と呼ばれ、結果としてgrep改行文字(LF / CR)と一致.(ドット)されます。

したがって、あなたの場合は、次のように動作します。

grep -aPoz '(?s)<h2>.Some text' file.txt

新しい行がここで.一致します。

CRとLFがあるかどうかわからない場合:

grep -aPoz '(?s)<h2>.{1,2}Some text' file.txt

grep最初の数バイトを読み取ってファイルの種類を決定するので、ファイルはバイナリファイルとして扱われ、ファイルはテキストファイルとして扱われますgrep-a

おすすめ記事