ini ファイル内の複数の行を削除する bash スクリプトを作成しようとしています。次の方法で構成されたiniファイルがあります。
# There could be any text before the following text
[machine1.conn]
ipAddress=192.168.1.1
portNumber=11001
[machine2.conn]
ipAddress=192.168.1.2
portNumber=11002
[machine3.conn]
ipAddress=192.168.1.3
portNumber=11003
# There could be any text after the previous text
これらのエントリをすべて ini ファイル (属性を含む) から削除したいと考えています。
ini ファイルには「マシン」エントリがいくつでも存在する可能性がありますが、この例では 3 つだけを示しています。角かっこで囲まれたラベルは ini ファイル内で完全に一意ですが、それぞれに続く属性は明らかに異なります。[machine#.conn]
最初と最後の行番号を決定する方法は既にあります。$firstMachineLineNum
これらが変数およびそれぞれに割り当てられているとしましょう$lastMachineLineNum
。私がやろうとしていたのは、sed を使用し$firstMachineLineNum
て、最後のマシンのportNumber
行番号から行の範囲を削除することでした。私はこういう方向に行っていた、sed -i '$firstMachineLineNum,$lastMachinesPortNumLineNum$d' file.ini
. これを行うには、 を決定する方法、つまり、最後の AFTER の$lastMachinesPortNumLineNum
最初の一致の行番号(私の例では) が必要です。理想的には、2を追加するだけに頼る必要はありませんportNumber
[machine#.conn]
[machine3.conn]
$lastMachineLineNum
.
sed や grep を使用してこの行番号を抽出するにはどうすればよいですか? 私はこれを一般的に複雑にしすぎていますか?もっと簡単な方法がありますか?