SED MAC を使用して、すべてのファイル内の特殊文字を含む行を再帰的に置換します。

SED MAC を使用して、すべてのファイル内の特殊文字を含む行を再帰的に置換します。

SEDon を使用して、ある行を別の行に置き換えようとしていましたMAC OS X Terminal 。ディレクトリ内にあるすべてのファイルの行を別の行に置き換える必要があるシナリオがあります。両方の行は複雑で、異なる特殊文字と記号が含まれています。

どうすれば交換できますか?

交換する必要がある

import { wait } from 'path/and-child-path'

import { wait } from 'path/path/and-child-path'

私がやろうとしていたのは

find . -type f | xargs sed -i '' "s@import { wait } from 'path/and-child-path'@import { wait } from 'path/and-child-path'@g"

うまくいきません。助けてください。

答え1

あなたsedが提供した には、まったく同じ一致および置換パターンがあります (タイプミスではなかった場合)。そのため、ファイルに変更が加えられることは期待できません。また、ビットは''そこに存在すべきではありません。

これらの点を修正すると、だろうで終わる

find . -type f | xargs sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g"

そのコードはそれでも失敗するだろう一般的なケースでは、ファイル名にはスペース文字 (さらには改行文字も!) が含まれる可能性があり、これらがまさにxargs区切り文字として使用されるからです。したがって、ファイル がある場合A X、はファイルおよびsedに対して動作するように指示されます。AX

-execオプションは問題を直接的に解決します:

find . -maxdepth 1 -type f -exec sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g" {} +

も追加したことに注意してください-maxdepth 1。そうしないと、findサブディレクトリにも降りてしまいます。

関連情報