0

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 を使用してこの行番号を抽出するにはどうすればよいですか? 私はこれを一般的に複雑にしすぎていますか?もっと簡単な方法がありますか?

4

3 に答える 3

1

ファイルが次のようになっている場合 (削除するブロック内に空白行がない場合)、Sed はそれを簡単に実行できます。

sed '/^\[machine[0-9]\{1,\}\.conn\]/,/^\s*$/d' file

.conn で終わる任意の名前を受け入れるように変更:

sed '/^\[.*\.conn\]/,/^\s*$/d' file

可変ターゲット行の変更:

machine='machine1'
sed '/^\['"$machine"'\.conn\]/,/^\s*$/d' file
于 2013-04-16T22:22:38.260 に答える
1

このワンライナーを試してください:

awk -v RS="" -v ORS="\n\n" '!/machine[0-9]+\.conn/' file

小さなテスト:

kent$  cat file
[foo_keep]
foo=foo

[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

[bar_keep]
bar=bar

[machine4.conn]
ipAddress=whatever
portNumber=11001

[machine5.conn]
ipAddress=whatever
portNumber=11002

[baz_keep]
hhh=hhh

出力

kent$   awk -v RS="" -v ORS="\n\n" '!/machine[0-9]+\.conn/' file
[foo_keep]
foo=foo

[bar_keep]
bar=bar

[baz_keep]
hhh=hhh
于 2013-04-16T22:13:10.293 に答える
0

この特定のブロックだけを除外したい場合は、これを使用できます。

awk 'NR < $firstline || NR > $lastline {print $0}' file.txt
于 2013-04-16T22:15:27.233 に答える