改行後にpcregrepアサーションエラーが発生しますか?

改行後にpcregrepアサーションエラーが発生しますか?

pcregrep空白行の後に最初の行を印刷してみてください。たとえば、ファイルの内容は

first line

second line

印刷する必要がありますsecond line。以下は、常に同じ正規表現を使用するいくつかのテストです。

Python 2.7の使用

python -c "import re; print re.search(r'(?<=\n\n).*?$',\
    open('file').read(), re.MULTILINE).group()"
second line

GNU grep 2.16の使用

grep -oPz  '(?<=\n\n).*?$' file
second line

pcregrepバージョン8.12の使用

pcregrep -Mo  '(?<=\n\n).*?$' file
(no output)

一部のテストでは、pcregrep振り返るアサーションは一般的にサポートされていますが、振り返るアサーション内の状況を具体的に処理する方法はないようです\n\nプレビューアサーションの内部に問題はありません。

RHELとUbuntuでテストされました。どんなアイデアがありますか?

ベストアンサー1

pcregrep明らかに探している改行の種類を指定できます。スイッチは-NPCREモードを使用するときにこれを行います。

-N newline-type、 --newline=newline-type PCRE ライブラリは、行末を表示するための5つの異なる規則をサポートします。これには、単一文字シーケンスCR(キャリッジリターン)とLF(改行)、2文字シーケンスCRLF、前の3種類のうちの1つを認識する「anycrlf」ルール、および次の「any」ルールがあります。 Unicode 行末が想定されます。シーケンスは行で終了します。 Unicode シーケンスは、上記の 3 つに VT(垂直タップ、U+000B)、FF(フォームフィード、U+000C)、NEL(次の行、U+0085)、LS(行区切り記号)、U+2028を加えたものです。 )とPS(段落区切り記号、U + 2029)。

PCREライブラリが構築されると、デフォルトの行末の順序が指定されます。これは通常、オペレーティングシステムの標準的な順序です。このオプションを別途指定しない限り、pcregrepはライブラリのデフォルト値を使用します。このオプションの可能な値は、CR、LF、CRLF、ANYCRLF、またはANYです。これにより、行末を変更せずにpcregrepを使用して他の環境のファイルを検索できます。スキャンされるデータがこのオプションで設定された規則に従わないと、pcregrepが奇妙に機能する可能性があります。このオプションは、オペレーティングシステムの標準改行シーケンスを使用すると予想される-f、--exclude-from、または--include-fromオプションで指定されたファイルには適用されません。

はい

$ pcregrep -Mo  -N CRLF '(?<=\n\n).*?$' sample.txt 
second line

$

その他の奇妙な行動

興味深いことに、フッシュから前方に変更すると、次のようになります。

$ pcregrep -Mo  '(?>\n\n).*?$' sample.txt 


second line
$

おすすめ記事