はstdout
への結果のストリームを出力します。 GNU sedをお持ちの場合は、-i
を使用してファイルをインプレースで変更できます。多くのBSD sed
では-i
を使用できますが、作成されたバックアップファイルに追加される拡張子になる引数が必要です。
さらにPOSIXyのままにしたい場合は、出力を新しいファイルにリダイレクトしてから、その一時ファイルを古い名前に移動するか、出力をリダイレクトしてアクセス権を変更しないようにすることができます。しかし、リダイレクトを1つのステップでやろうとはしないでください。シェルが最初に行うことはファイルを切り捨てるので、それを読み取ろうとすると空になります。 GNUは、sedので
だから、あなたが行うことができます:
sed -i -e '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php
やBSDで(引数作品やGNUのが、GNUではオプションです)
sed -i .bak -e '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php
や移植性
sed '/App\Providers\*::class,/a \ App\Providers\${repoName}${provider}::class,' ./config/app.php > tmp_paragraph
cat tmp_paragraph > ./config/app.php
rm tmp_paragraph
repoName
とprovider
の変数がexpを取得するシェル変数になるようにするsedスクリプトを二重引用符で囲む必要がありますbashは、単一引用符付き文字列内の変数を展開しません。
sed -i -e "/App\\\\Providers\\\\*::class,/a \\ App\\\\Providers\\\\${repoName}${provider}::class," ./config/app.php
をし、bashは二重の内部エスケープ文字として扱うになるので、我々はスラッシュの余分なエスケープの多くをしなければならなかったことに注意してください:だから、GNU sedの例を取るために、あなたはそうのように二重引用符を使用するように変更します引用符。私たちは一重引用符を使用して変数を外側に置くことができます(そして、引用符を二重にすることに注意してください。なぜなら、それらの実際のバックスラッシュを得るためには、
sed -i -e '/App\\Providers\\*::class,/a \ App\\Providers\\'${repoName}${provider}'::class,' ./config/app.php
コードはエラーなしで実行されますが、このファイルに新しい文字列は追加されません。 – Ohssie
@Ohssieファイルへの書き込み権限がありますか?私がサンプルファイルを作成すると、 'AppProvider $ {repoName ...}が自分で追加されます。これらのオプションを指定せずに実行すると、行が追加されていますか? –
私はその行を追加しましたが、そのように見えることは意図されていません。これは、スクリプトを実行する際に、1つの単語入力を求めるプロセスです。その関数は、このような行を "App \ Providers \ user_inputServiceProvider :: class"ファイルに追加することを意図しています。 – Ohssie