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

grep と sed を使用して文字列を検索して置換する

find を使用できます と -exec sed に直接 最初に oldstr を見つけるのではなく grep で .少し効率が悪いかもしれませんが、それは重要ではないかもしれません。このように、sed 置換は find でリストされたすべてのファイルに対して実行されます 、しかし oldstr の場合 そこにはありませんか?

find /path -type f -exec sed -i 's/oldstr/newstr/g' {} \;

あなたの解決策は大丈夫です。この方法でのみ試してください:

files=$(grep -rl oldstr path) && echo $files | xargs sed....

xargs を実行します grep が 0 を返す場合のみ 、例えばいくつかのファイルで文字列が見つかったとき。


私は Vlad の考えを取り入れ、それを少し変更しました。

の代わりに
grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' /dev/null

sed: couldn't edit /dev/null: not a regular file

リモートサーバーへの3つの異なる接続でやっています

touch deleteme
grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' ./deleteme
rm deleteme

これはあまり洗練されておらず、サーバーへの接続が 2 つ必要になります (1 行ですべてを行う方法があるかもしれません) が、ジョブも効率的に実行されます


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

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

  3. ファイル内の文字列を置き換える方法は?

  1. 「sed」を使用して検索して置換しますか?

  2. ls と grep を使用して実行可能ファイルを見つける

  3. 一致するテキストを見つけて次の行を置き換える

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

  2. Bash 文字列操作の例 – 長さ、部分文字列、検索と置換

  3. ディレクトリとサブディレクトリで検索して sed に置き換えます