複数のファイルで指定されたテキストを置き換える

複数のファイルで指定されたテキストを置き換える

多くのヘッダーとソースファイルを含むCプロジェクトがあります。このファイルには、プログラムのバージョンに関するコメント付きの行があります。それは次のとおりです。

/**
* all the file info and stuff....
* VER: 0.01
* rest of comments
*/

//code ....

プロジェクトのすべてのサブフォルダにあるバージョンを繰り返し編集したいと思います。一部のファイルにはこの行があり、一部のファイルにはありません。標準のgnu / linuxプログラムを使用してこれをどのように実行できますか?役に立つsedと思いますgrep

ベストアンサー1

この試み

find . -type f -name '*.[ch]' -exec bash -c '
    grep -q "VER: [0-9]" "$1" && sed -i.bak "s/VER: [0-9].*/VER: 1.42/" "$1"
' -- {} \;

.bak(バックアップファイル)の作成を妨げたくない場合は、次のように少し単純化できます。

find . -type f -name '*.[ch]' -exec sed -i 's/VER: [0-9].*/VER: 1.42/' {} \;

またはこれxargs+grepバージョン

(名前にスペースがあるファイルには適用されません)

grep -rl 'VER: [0-9].*' . |
    grep '.*\.[ch]$' |
    xargs sed -i 's/VER: [0-9].*/VER: 1.42/'

または使用バッシュグローバルスター再帰

shopt -s globstar
sed -i 's/VER: [0-9].*/VER: 1.42/' **/*.[hc]

または使用扱いにくい

sed -i 's/VER: [0-9].*/VER: 1.42/' **/*.[hc]

おすすめ記事