私のシステムのフォルダにC++
コンパイルしたいプロジェクトがあります。
この手順では、C++
私のバージョンのコンパイラがサポートしていないいくつかの慣用語を使用します。特に、コード内でデータ値が使用されることがよくあります'nullptr'
。
私がしたいことはnullptr
。NULL
次のコマンドを使用してこれを実行できます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