Вы получаете эту ошибку, потому что если у вас есть диапазон адресов (ADDR1, ADDR2), вы не можете поставить другой адрес после него: sed ожидает команду там, а /
не является командой.
Вы можете использовать здесь несколько скобок:
$ seq 20 > file
$ echo "new content" > tmpFile
$ sed '0,/5/{/5/ r tmpFile
}' file
выводит новый текст только после первой строки с 5
1
2
3
4
5
new content
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Я обнаружил, что мне нужно поставить новую строку после имени файла. Я получаю эту ошибку в противном случае
sed: -e expression #1, char 0: unmatched `{'
Похоже, что sed принимает всю оставшуюся строку в качестве имени файла.
Наверное, лучше написать
sed '0,/5/ {
/5/ r tmpFile
}' file
Полная прозрачность: я не использую sed, за исключением очень простых задач. На самом деле я бы использовал awk для этой работы
awk '
{print}
!seen && $0 ~ patt {
while (getline line < f) print line
close(f)
seen = 1
}
' patt="5" f=tmpFile file