GNUはこれを探してそれを見つけずにSedを実行しますか?

GNUはこれを探してそれを見つけずにSedを実行しますか?

パスワード

find /tmp/ -type f                                      \
    \( -name "*.h" \) -o \( -name "*.cpp" \) -o         \
    \( \! -name "*.bak" \) -exec                        \
    sed -i '1s/^/#include <stdint.h>\n/' {} +

これが正しいアプローチであるかどうかは完全にはわかりません。一時ファイルを使用せずにファイルに直接書き込みます。行の先頭を変えたいです。。時間そして.cppファイルには以下が含まれていますが、含まれていません。.bak文書。

効率的な交換を行うには?注:私はGNUを使用していますsed


エラーに適用されたファイルを挿入するためにTerdonのコマンドを試しました。

$ cat test.sh 
gfind /tmp/ -type f   \
    \( -name "*.h" -o -name "*.cpp" -o ! -name "*.bak" \) \
    -exec gsed -i '1s/^/#include <stdint.h>\n/' {} +    
$ sh test.sh 
$ cat test.sh    
#include <stdint.h>
gfind /tmp/ -type f   \
    \( -name "*.h" -o -name "*.cpp" -o ! -name "*.bak" \) \
    -exec gsed -i '1s/^/#include <stdint.h>\n/' {} +

そこにあるすべてのコマンドはGNU:findとsedです。

答え1

この試み:

find /tmp/ -type f  -name "*.h" -o -name "*.cpp"  \
           -exec  sed -i '1s/^/#include <stdint.h>\n/' {} +

また、私が正しく指摘したように、これは! -name "*.bak"重複しています。パターンは-name *foo過度に一致しますfoo。したがって、*.cpp銀は*.h除外されました*.bak

関連情報