次のgrepコマンドをファイルに出力するにはどうすればよいですか?

次のgrepコマンドをファイルに出力するにはどうすればよいですか?

私はcrudiniを使ってiniファイルにセクションとパラメータを追加して削除しています。 crudiniを実行した後、ファイルに余分な空白行が残りましたが、各セクションが1つの空白行に分かれるように整理したいと思います。次の関数のgrepコマンドは機能しますが、出力をファイルにリダイレクトしようとすると、結果として空のファイルが生成されます。

パスワード

sctn="Section Two"
mypath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
my_ini=$mypath/test.ini
ini_sec=$sctn

function inidel () {
  crudini --del --verbose $my_ini "$ini_sec"
  grep -A1 . $my_ini | grep -v "^--$"
}

function iniadd () {
  crudini --set --verbose $my_ini "$ini_sec"
  grep -A1 . $my_ini | grep -v "^--$"
}

データテスト.ini

 1| [Section One]
 2| Parameter1=x1
 3| Parameter2=example1
 4| Parameter3=one
 5|
 6| [Section Two]
 7| Parameter1=x2
 8| Parameter2=example2
 9| Parameter3=two
10|
11| [Section Three]
12| Parameter1=x3 
13| Parameter2=example3
14| Parameter3=three
15|

> $my_inigrepコマンドの後に試してみました。実際に何をしているのかはよくわかりませんが、私の推測では、各行の最後の空行の結果を書くようです。これを使用すると>> $my_ini正しく書き込まれますが、テキストを上書きするのではなくテキストを追加します。

答え1

二重矢印(>>)はファイルにデータを追加するために使用されます。

ファイルを上書きするには、単一の矢印(>)を使用します。

答え2

問題は、私が作業しているのと同じファイルに書き込もうとしていることです。一時ファイルを使用して my_ini に出力すると機能します。

私の質問の元のコードを使用すると動作します。

function inidel () {
  crudini --del --verbose $my_ini "$ini_sec"
  grep -A1 . $my_ini | grep -v "^--$" > tmpfile
  cat tmpfile > $my_ini
}

catを使用すると、これも機能します。

function inidel () {
  crudini --del --verbose $my_ini "$ini_sec"
  cat $my_ini > tmpfile
  cat -s tmpfile > $my_ini
}

これを行うより良い方法があると確信していますが、より良い方法はありません。これが私が思いついた方法であり、今後使用する方法です。

関連情報