本記事は、 シェルスクリプト Advent Calendar 2021 の 3日目 の記事だ。
3日目が終わりそうになっても誰も書きそうにないので、最近 sed
コマンドで ブロック {}
を使っていたら、 "unmatched `{" というエラーにハマったので、そのメモ。
target.txt
:
foo
bar
foo
bar
foo
insert.txt
:
***
上記のような、2つのファイルがあったとする。
target.txt
ファイルに対して、 正規表現アドレス で bar
から始まる行を選択し、 その後ろに r コマンド insert.txt
のファイルの中身を挿入する。
するとこんな結果になる。
$ sed -e '/^bar/rinsert.txt' target.txt
foo
bar
***
foo
bar
***
foo
では、アドレス指定の後ろにブロック {}
を追加し、以下のように bar が2回以上ヒットしたらエラーコード出して終了するようにしてみる。
$ sed -e '/^bar/{rinsert.txt;x;/./Q129;g}' target.txt
sed: -e expression #1, char 0: unmatched `{'
$ echo $?
1
はい、別のエラーで失敗した。
ちゃんと {
と }
の数はマッチしているのに……