私はこれを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
。以下を使用してください。
-z
grep
改行の代わりに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