Sedを編集できません。通常のファイルではありません。

Sedを編集できません。通常のファイルではありません。

私は直面しているこの問題を解決するために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一致するファイルのファイル名のみを一覧表示します。次に、を使用する場合と同様に、xargsstdinを使用して次のコマンドに引数として追加します。{}find -exec cmd {} \;

しかし、Linuxのbashでテストされているので、うまくいかない場合は、grep --helpgit-bash / cygwinでフラグが異なることを確認できます。しかし、通常は同じです。

おすすめ記事