フォルダに含まれているファイルで、その用語が表示されるすべての項目を置き換えます。

フォルダに含まれているファイルで、その用語が表示されるすべての項目を置き換えます。

私のシステムのフォルダにC++コンパイルしたいプロジェクトがあります。

この手順では、C++私のバージョンのコンパイラがサポートしていないいくつかの慣用語を使用します。特に、コード内でデータ値が使用されることがよくあります'nullptr'

私がしたいことはnullptrNULL

次のコマンドを使用してこれを実行できますVIM

:%s/nullptr/NULL/g 

各ファイルを開き、コマンドを実行せずにディレクトリ内のすべてのファイルに対してこれをどのように一度実行できますか?

答え1

for file in /path/to/dir/*; do
  sed -i s/nullptr/NULL/g "$file"
done

ただし、これはサブディレクトリには影響しません。

編集1

より高速なソリューション(GNUを使用):

find /path/to/dir -type f -print0 | xargs -0 sed -i s/nullptr/NULL/g

これはサブディレクトリ(およびドットファイル)にも影響します。-maxdepth 1必要でない場合は追加してください。

答え2

これを行う方法は2つあります。

ウィム

次のようにコマンドラインでvimを使用できます。

$ vim -c "%s/nullptr/NULL/g|wq" foo.txt

forループでラップされます。

$ for i in *; do vim -c "%s/nullptr/NULL/g|wq" -- "$i"; done

真珠

$ perl -p -i -e 's/nullptr/NULL/g' foo.txt

forループでラップされます。

$ for i in *; do perl -p -i -e 's/nullptr/NULL/g' -- "$i"; done

または簡単に:

$ perl -p -i -e 's/nullptr/NULL/g' -- *

答え3

GNUツールの使用:

grep -rlZ nullptr /path/to/dir |
  xargs -r0 sed -i s/nullptr/NULL/g

すべてのファイルを再作成しないでください。

いつものようにsed -i、リンク(ハードとソフト)が壊れ、ファイルの所有権と権限が変更され、ファイルのリーン性やその他の潜在的に一般的ではない属性が変更される可能性があることに注意してください。また、grep以前のバージョンのGNUは。2.12-r

関連情報