GNU/Linux >> Linux の 問題 >  >> Linux

Mac および Linux でのテキスト ファイルでの再帰的な検索と置換

Mac の場合、より類似したアプローチは次のようになります:

find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"

別の解決策として、私はこれを Mac OSX 10.7.5 で使用しています

grep -ilr 'old-word' * | xargs [email protected] sed -i '' 's/old-word/new-word/g' @

クレジットは次のとおりです:Todd Cesere の回答


OS X は BSD ツールと GNU ツールを組み合わせて使用​​するため、常にドキュメントを確認することをお勧めします (私は less を持っていましたが)。 OS X のマンページにも準拠していませんでした):

https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html

sed は -i の後に引数を取ります バックアップの拡張子として。空の文字列 (-i '' ) バックアップなし。

次のことを行う必要があります:

find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +

-type f 良い習慣です。ディレクトリなどを指定すると、sed は文句を言います。

-exec xargs より優先されます; -print0 を気にする必要はありません

{} + 最後に find を意味します 結果ごとに再実行するのではなく、呼び出されたコマンドの 1 つのインスタンスにすべての結果を引数として追加します。 (1 つの例外は、OS で許可されているコマンドライン引数の最大数に違反した場合です。その場合、find 複数のインスタンスを実行します。)

「無効なバイト シーケンス」などのエラーが発生した場合は、LC_ALL=C を追加して標準ロケールを強制すると役立つ場合があります。 コマンドの開始時に、次のように:

LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +


Linux
  1. Linuxでsedを使用してテキストファイルを検索および置換する

  2. 実行する前に再帰的なSed検索をテストして置き換えますか?

  3. Linuxでファイルを検索するには、検索と検索を使用します

  1. Linux ファイルとディレクトリの削除

  2. コマンド ライン:grep に一致するすべてのファイル名を検索して置換します

  3. Linuxコマンドラインで複数のファイルの文字列を置き換える方法

  1. LinuxでSed、ex、perlコマンドを使用してテキストを検索および置換する

  2. sedを使用して、ファイル内の行の範囲内のテキストを検索して置換します

  3. Seagate Momentus XT の破損ファイル (Linux および Mac)