階層内で同じ名前(myfile)を持つ複数のファイルをいくつか変更したいと思います。デフォルトでは、ファイルの最初の行を「my new line」に置き換えて、2行目を削除したいと思います。私はこれを試みます:
find . -name myfile -exec cat {} \; | sed -i -e '1 c my new line' -e '2d'
myfile がコマンドを実行するディレクトリにある場合、階層の低レベルでは機能しますが、上位レベルでは機能しません。
次のエラーメッセージがあります。
sed: no input files
find: ‘cat’ terminated by signal 13
どうすればいいですか? (私はUnixコマンドについてはよくわかりません。)ポイントは、catの出力をsedにリダイレクトし、見つかった同じファイルを変更することです。
答え1
このcat
コマンドをスキップすると問題が解決する可能性があります。
find . -name myfile -exec sed -i -e '1 c my new line' -e '2d' {} \;
exec の引数は{}
ファイル名なので、sed -i
各ファイルに対してコマンドを実行します。
答え2
find
最初に呼び出さずにsedを使用して行を変更できます。
sed -i '1c my new line' **/myfile
shopt -s globstar
最初にglobstar()を設定する必要があるかもしれませんが、