sedコマンドをfind -execで使用できませんか?

sedコマンドをfind -execで使用できませんか?

私はこのファイルを持っています:

ファイル.txt:

...
threshold:
  swipe: 2
  pinch: 2 

interval:
  swipe: 2
  pinch: 2

いいえ、そうすれば:

$ locate config.yml | while read i; do sed '/swipe|pinch/s/[0-9]/3/' $i; done

2次のように変更されます3

 ...
    threshold:
      swipe: 3
      pinch: 3 

    interval:
      swipe: 3
      pinch: 3

しかし、次はfindそうではありません。

sudo find / -name config.yml -exec sed -n '/swipe|pinch/s/[0-9]/3/' '{}' \+

正規表現は同じなので問題ありません。何が問題ですか?

ベストアンサー1

上部でファイル名を参照しますfile.txtが、その名前のファイルのみが処理されるため、これらのパターンが含まれているとしますconfig.ymlconfig.yml

locateそしてbash 商標これはどちらかとは関係がないので、少し誤解を招く可能性があります。)もっと重要なのは、これがどのような環境ですか? LinuxシステムではGNU/sed通常はインストールされ、-Eオプションが必要です。理解する状態swipe|pinch。それなしで角括弧式([0-9]パターンの一部)は機能します-E

したがって、これを念頭に置いて、次はGNU / sedとBSD/sed:

locate config.yml | while read -r i; do sed -E '/swipe|pinch/s/[0-9]/3/' "$i"; done

または以下を使用してfind

find . -name config.yml -exec sed -E '/swipe|pinch/s/[0-9]/3/' '{}' +

注:パターンは/swipe|pinch/正しいです。パイプシンボルをエスケープするように変更する提案は、もはや/swipe\|pinch/正規表現ではなく、リテラルと一致するため、|ファイル内のどの項目とも一致しないため、機能しません。しかしそれは会議周辺アポストロフィ(')を省略すると動作します。

sed -E /swipe\|pinch/s/[0-9]/3/

おすすめ記事