55031


> /var/www/html/lib/a/b/c/filename_x.php

上記を下記へ置換する場合、「ファイル名だけを指定する場合」と「フルパスを指定する場合」で置換実行処理速度に違いはありますか？

> /var/www/html/lib/a/b/c/filename_z.php

・長い文字列の方が見つけやすい気もするし、短い文字列の方が処理が軽い気もするし、違いがあれば知りたいと思い質問しました

* * *

ファイル名だけを指定する場合の一例

[code]

    $ find . -type f -name '*.php' -exec sed -i 's%filename_x.php%filename_z.php%g' {} +
    
[/code]

フルパスを指定する場合の一例

[code]

    $ find . -type f -name '*.php' -exec sed -i 's%/var/www/html/lib/a/b/c/filename_x.php%/var/www/html/lib/a/b/c/filename_z.php%g' {} +
    
[/code]


CC BY-SA 4.0
2019-05-17T00:55:37.423
55026
2019-05-17T07:37:15.873
7886
question
unix
find と sed で複数ファイルを一括置換する場合、「渡す文字列の長さ」と「結果が表示されるまでの速度」には関係がありますか？


どちらが速いかは`sed`の実装しだいです。素直な正規表現マッチングをしていたらパターンが短い方が速いでしょうし、最適化でBM法を使っていたらパターンが長い方が速いことがあります。

いずれにしても、体感できるような差が出ることは稀ですので、悩んでいる時間があったらどちらでもいいから実行してしまえば良いと思います。


CC BY-SA 4.0
2019-05-17T04:11:03.790
55031
2019-05-17T04:11:03.790
3475
55026
answer


`time` コマンドでミリ秒単位で測定出来るので 試してみてください。

実行方法: time 実行したいコマンド 引数 ...

出力例:

[code]

    real    0m0.001s  ← 終了するまでの時間
    user    0m0.000s  ← 実行したプログラムの処理にかかった時間
    sys     0m0.000s  ← カーネルなどのOSの処理にかかった時間
    
[/code]


CC BY-SA 4.0
2019-05-17T05:48:07.453
55034
2019-05-17T05:48:07.453
5008
55026
answer


全然違う動作をするもの（の動作時間）を比較しても仕方ないんぢゃ・・・

`/var/www/html/lib/a/b/c/filename_x.php` を  
`/var/www/html/lib/a/b/c/filename_z.php` に置換したいけど  
`/filename_x.php` を  
`/filename_z.php` に置換したくないなら後者でないと案件に合いませんよね。  
逆に置換したいなら前者。

要望に合わないものを実行しても役に立たないっす。

`sed` はあなたの要望を斟酌しませんから、前者なら  
`/var/www/html/lib/filename_x.php/a/b/c/filename_x.php` を  
`/var/www/html/lib/filename_z.php/a/b/c/filename_z.php` に置換しますよ。

どういう置換がお望みかは読者にはわかりません。もしかしたら正規表現どちらも希望通りでないかもしれないっす。


CC BY-SA 4.0
2019-05-17T07:37:15.873
55045
2019-05-17T07:37:15.873
8589
55026
answer