最初sed
コマンドはsed
は、システム上(入力ファイル間のラインカウンタをリセットしないと、どちらもしないということである「失敗した」という理由)私のMac OS Xマシン上、コメントを参照してください。
$ cat test1
a
b
g
$ cat test2
aa
bb
cc
$ sed -n '=' test1 test2 # the '=' sed command outputs line numbers
1
2
3
4
5
6
この最初のsed
コマンドでは、あなたはそれが何をしたいのかやっていないされている理由、それが唯一の影響最初のファイルの最初の行。
ソリューションは、ファイルをループにし、(Makefileの中にテストされていない)、それらのそれぞれのsed
を呼び出す:
find
と
xargs
を使用して
@for f in $(CURDIR)/foo/npm/*.csv; do \
sed -i '' '1 s/^.*$$/"bar","repository"/g' $f; \
done
もfind
が拾っていないことを確認してくださいだけで、動作しますフォルダ内のファイルをさらに下に移動します。
EDIT:この回答のコメントを踏まえて、私は完全に複数のファイルにsed -i
の使用を避けることをお勧めします、とfor
-loopsに両方のステートメントを変換する(このケースでは、彼らは1つのループに崩壊することができます二つの文)を:私の経験で
@for f in $(CURDIR)/foo/npm/*.csv; do \
sed -i '' '1 s/^.*$$/"bar","repository"/g' $f; \
sed -i '' 's/\(.*\)@/\1","/g' $f; \
done
、Makefileの中でfor
-loopsを使用してfind
とxargs
を使用する場合と比較してはるかに一般的のようです。これはおそらく、ユニックス間のfind
とxargs
の間の非互換性のためです。明示的なループを使用すると、Makefileを読みやすくすることもできます。
コマンドは今のところうまく見えます – fedorqui
@fedorqui 2番目のファイルは正常に動作し、すべてのファイルが変更されますが、最初のファイルは1つだけ変更されます。最初の1つ=/ –
ダミーファイルに対してテストしたところ、うまくいきました。だから私はエラーを再現することはできません。私たちが助けることができるようにいくつかの[mcve]を追加してください。そうでなければ、私たちはあまり何もできません。 – fedorqui