grep - キャリッジリターンを新しい行として認識します。

grep - キャリッジリターンを新しい行として認識します。

特定の文字列を含むPHPファイルを見つけるためにUnixを実行しているWebサーバーを検索したいと思います。通常、私はこれを行うために次のコマンドを使います。

探す。 -name "*.php" -print0 | xargs -0 grep -H -i "検索する文字列"

これはこれまでうまく機能しましたが、今ではすべてのPHPスクリプトに改行がなく、キャリッジリターンだけがあるサーバーに閉じ込められています。 grepはキャリッジリターンを新しい行として認識しないようです。したがって、ファイルに一致するものがある場合、上記のコマンドは行だけでなくファイルの内容全体を印刷します。

どんな助けでも大変感謝します!

ベストアンサー1

非常に効率的ではありませんが、動作するはずです。

find . -name '*.php' -exec bash -c "grep 'pattern' <(tr '\r' '\n' <{})" \;

ファイル名を表示する他の方法は次のとおりです。

find . -name '*.php' -exec bash -c "grep 'pattern' <(tr '\r' '\n' <'{}') |
    sed s+^+'{}':\ +" \;

おすすめ記事