grep は DOS ファイルから行末パターンを検索します。

grep は DOS ファイルから行末パターンを検索します。

つまり、拡張正規表現モードでは機能しませんか\r? :grep

$ printf 'abcd\r\n' | grep -Ec 'd\r$'
0

$ printf 'abcd\r\n' | grep -c 'd.$'
1

$ printf 'abcd\r\n' | grep -Pc 'd\r$'
1

私の考えでは、\r拡張正規表現の一部であるようです。 https://valelab4.ucsf.edu/svn/3rdpartypublic/boost/libs/regex/doc/html/boost_regex/syntax/basic_extended.html。いいえ?
それとも本当に限界ですかgrep

ベストアンサー1

いいえ、\r標準の一部ではありません。基本的な...でもない延長する以下を除く正規表​​現存在するawk、一部はgrepこれを拡張としてサポートしていますが(例:ast-openやデフォルトのBREをgrep使用)、すべての正規表現タイプをサポートしています。-E-X-P

perlしかし、これはPCRE式だけでなく正規表現の一部なのでgrep-P

ほとんどのシェルはキャリッジリターンに拡張される$'...'ksh93の引用符形式をサポートします。\rしたがって、これを使用して次のことができます。

grep $'d\r$'

(*LF)PCREを(*CRLF)使用すると、などのディレクティブを使用して行区切り文字の種類を指定できますが、PCREを使用してPerlなどの一致を実装しても使用できません(*CR)grep -Pgrepコンテンツ一度に1行(LFで区切られている)なので、正規表現に一致する文字列にLFが見つかりません。

pcregrepただし、UltralineMモードでは使用できます。

$ printf '%s\r\n' foo abcd bar | pcregrep -M '(*CRLF)d$' | sed -n l
abcd\r$

sed -n lCRでマーク\r)。

GNUを使用すると、フラグを使用して行の代わりにNULで区切られたレコードで機能させることがgrepできます。-z

$ printf '%s\r\n' foo abcd bar | grep -oPz '(*CRLF)(?m).*d$' | tr '\0' '\n' | sed -n l
abcd$

(Ultralineフラグをレコードの終わりに加えて、各行の終わりに一致させ、出力mに表示するためにNULをLFに解析することもできます。)$tr

おすすめ記事