私は直面しているこの問題を解決するためにSOで言及されているさまざまなソリューションを試しました。
すべてのファイルを再帰的に見つけ、いくつかのテキストを変更したいと思います。
これはWindowsのcygwinで使用されるコマンドです。
find . -not -path \*.hg\* -exec sed -i 's/FCLP1025/FCLP1080/g' {} \;
私が得た結果は
sed: couldn't edit ./xxx/yyy/filename: not a regular file
ここで何か抜けましたか?
ベストアンサー1
find
すべてのファイルとすべてのディレクトリのリストを返します。実際に文字列を含むファイルを見つけるには、検索を制限する必要があります。以下を追加してみてください。
find -type f ... # Doesn't return directories
find -iname "*.txt" ... # returns only files ending in '.txt' (case insensitive)
あるいは、本当に豪華になりたい場合は、grepを使用して実際に文字列を含むファイルでのみsedを実行できます。
grep -l -r 'FCLP1025' | xargs sed -i 's/FCLP1025/FCLP1080/g'
grepは-r
再帰的に検索し、-l
一致するファイルのファイル名のみを一覧表示します。次に、を使用する場合と同様に、xargs
stdinを使用して次のコマンドに引数として追加します。{}
find -exec cmd {} \;
しかし、Linuxのbashでテストされているので、うまくいかない場合は、grep --help
git-bash / cygwinでフラグが異なることを確認できます。しかし、通常は同じです。