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
明らかに探している改行の種類を指定できます。スイッチは-N
PCREモードを使用するときにこれを行います。
-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
$