2017-06-09 14 views
1

内の1つのファイルが、すべてで間違った場所にコードを追加していますすべてのファイルにoracleHomesの行。私は、コマンドを実行すると、TCの*名を持つアルファ順で最初のファイル、テキストが適切に付加されますは、私は、ディレクトリ内のファイルの束に、次のタブインデントのコードを持っているディレクトリ

sed -i "/oracleHomes/ a \\\t\t\t\t\t\t\t\t'useOracleDriver': useOracleDriver," $(find . -type f -name 'tc*') 

'oracleServers': dcoDatabaseServers, 
    'oracleHomes': dcoDatabaseHomes, 
    'useOracleDriver': useOracleDriver, 
    'sysPasswords': dcoSYSPasswords, 

が、他のすべてのファイルが始まるとの私は、このコマンドを持っていますtc *、私は'useOracleDriver': useOracleDriver行を見るが、ファイルの最後に追加されている。他のすべてのファイルの適切な場所にコマンドを追加する方法を知りたいですか?

+0

私は再現できませんでした。私は行末をチェックしていますが、それは一致しているように見えますが、行の後ろにappファイルがあるので、それは1行だと思うかもしれません。 –

+0

'-s'オプションを試しましたか? – Yunnosch

+1

[mcve]に簡略化できますか?よりシンプルなコンテンツで、それぞれ5行の3ファイル?例えば。タブなし、 '' ''はありません。 – Yunnosch

答えて

0

単一sed実行時に代わりにすべての、個々のファイルにsedコマンドを実行してみてください:

find . -type f -name 'tc*' -exec sed -i "/oracleHomes/ a \\\t\t\t\t\t\t\t\t'useOracleDriver': useOracleDriver," {} \; 

または

for f in $(find . -type f -name 'tc*'); do sed -i "/oracleHomes/ a \\\t\t\t\t\t\t\t\t'useOracleDriver': useOracleDriver," $f; done 

第二のフォーマットの利点は、そのイベントでGNU sedを使用していないので(-iはありません)、

for f in $(find . -type f -name 'tc*'); do sed "/oracleHomes/ a \\\t\t\t\t\t\t\t\t'useOracleDriver': useOracleDriver," $f > $f.tmp; mv $f.tmp $f; done 
に変更できます
関連する問題