2

フォルダー内の一連のテキスト ファイルを調べて、3000 の異なる数字のセットから数字を含まないすべての行を削除する、単純なことを perl で作成しようとしました。

それを始めるために、私は試しました

perl -ni.bak -e "print if /315879|315861|313956/" sometextfile.txt

これはこれまでのところうまくいきます。問題は、3 つの数値だけをテストするのではなく、約 3000 の数値をテストする必要があることです。上記の正規表現にそれらすべてを入れると、ある時点で切り捨てられ、すべての数値が検索されているわけではないようです。

どうすればこれを解決できますか?

そして、私たちはすでにそれに取り組んでいますが、フォルダー内のすべての *.txt ファイルに対してその行を反復するにはどうすればよいでしょうか?

4

2 に答える 2

3

3000 個の数字のリストは、実際の Perl プログラム/スクリプトのコンテキスト内で正常に機能するはずです。

ただし、質問では、シェルプロンプトからコマンドラインで実行されるワンライナーとして表示します。つまり、シェルはPerlインタープリターに渡す前に行を切り捨てます。現代のシェルの典型的な最大行の長さはわかりませんが、3000 の 6 桁の数字と正規表現の代替用のパイプを追加すると、最大 21,000 文字になります。これは、ほとんどのシェルがデフォルトで許可するよりも長くなる可能性があります。 .

于 2013-07-03T11:30:46.203 に答える
1

わかりました、これは間違いなく perl の問題ではないようですが、使用しているコマンド シェルに関するものです。Windows システムの制限に関する公式の Microsoft 記事があります: http://support.microsoft.com/kb/830473/en-us

ただし、Unix / Linux システムは、引数の最大長に関する制限がはるかに少ないようです (実際のカーネルなどにもよりますが、Google で確認できます)。私のコードを MacOS を実行している友人に渡すと、彼は問題なくシェルに貼り付けて適切に実行しました。

したがって、私の解決策は、ライブの Linux ディストリビューションを入手して、そこで仕事をすることです。美しくはありませんが、これは私にはうまくいきます。それでも、誰かが Windows で使用できるソリューションを見つけた場合は、将来のニーズのために感謝します。

みんなありがとう。

于 2013-07-03T21:09:47.067 に答える