web-dev-qa-db-ja.com

`grep -P`(Perl / Python regex)はほとんどのLinuxディストリビューションで移植可能ですか

私は(Perl/Python互換の正規表現)正規表現を好みます。

man grep

....ただし、システムでpcreが使用可能な場合にのみ機能します

これは最も一般的なLinuxディストリビューションでサポートされていますか?

私はfreebsd、solarix、busybox、...を気にしません.

1
guettli

[〜#〜] pcre [〜#〜] は、ほぼすべてのサーバーおよびdesktopLinuxシステムですが、軽量システムや組み込みシステム(電話、ルーター、TV、その他 IoT )では必ずしも期待できません。多くの場合、標準ユーザーランドの非常にトリミングされたバージョンがあります(基本的に、 busybox ベースのすべてのものはPCREがないことがほとんど保証されています)。

Debianには 人気コンテスト さまざまなパッケージのインストールメトリックを測定する機能があります。 grep(25番目に一般的、176kインストール)はlibpcre3(94番目に一般的、174kインストール)に依存します(notオプション) )。食い違いを説明することはできませんが、心配することもありません。

完全なLinuxディストリビューションを実行している最新のデスクトップおよびサーバーには、PCREサポートでコンパイルされたバージョンのgrepがあると想定しても問題ありません。

それでも、移植性のより良い保証を備えたPCREが必要な場合は、grep -Pまたはpcregrep(1kインストールで9363番目)またはack(180インストールで21728番目)に依存しないでください。 Perl(175kインストールで88番目)を直接使用します。

Perl -ne 'print if /regexp/'

「セキュリティ目的」のために意図的にPerl、python、phpを欠いているサーバーがあります。つまり、多くの不正なスクリプト( rootkits など)がこれらに依存しているため、実行できません。これは非常にまれです(強力な不正なPOSIXシェルスクリプトがたくさんあるので、ちょっとばかげています)。

注2:Perlは遅いです(pythonもそうです)。 LibPCREははるかに高速ですが、正規表現が単純であるほど、パフォーマンスが向上します。可能であれば、grepのみ(BRE、基本正規表現)を使用するか、PCREランドを深く掘り下げるのではなく、grep -E(ERE、拡張正規表現)を試してください。

5
Adam Katz

私が覚えている限り、CentOS、Ubuntu、RedHat、Debian、およびこれらに基づく他のディストリビューションなど、多くのLinuxディストリビューションでpcreを見てきました。何の問題もないと思います。ソースも利用可能です:

http://sourceforge.net/projects/pcre/files/pcre/

0
Ali Pandidan