GNU awk を使用すると、一度にファイル全体を読み取ることができます-v RS='\0'
(他の awk でも動作します):
$ awk -v RS='\0' -v ORS= '{gsub(/\n{/,"{\n")}1' file
bla.update({
'test': {'tag': 'twenty',
他の awks では、\0
上記のレコード区切り文字の代わりに、入力ファイルに存在しない他の文字 (control-C など) を使用できます。
$ awk -v RS= -v ORS='\n\n' '{gsub(/\n{/,"{\n")}1' file
bla.update({
'test': {'tag': 'twenty',
ただし、連続する空白行のシーケンスを単一の空白行に圧縮し、末尾の空白行がまだ存在しない場合はファイルの最後に追加します。
最後に、任意の awk を使用して一度に 1 行ずつ読み取ったファイルの内容全体から文字列を作成し、END セクションでその文字列を操作できます。
$ awk '{s=s $0 ORS} END{gsub(/\n{/,"{\n",s); printf "%s",s}' file
bla.update({
'test': {'tag': 'twenty',