Я работаю с файлом .sh, в котором есть строка
sed -i -e "/\[/r ${NEWPERMS}" ${CURRENTPERMS}
NEWPERMS и CURRENTPERMS являются файлами. Эта строка до недавнего времени вставляла содержимое NEWPERMS после символа [ в файле CURRENTPERMS. Это сработало, потому что до недавнего времени в файле CURRENTPERMS был только один файл [. Внезапно появился второй [, и указанная выше строка вставляется после обоих.
Мне нужно, чтобы он продолжал вставлять только после ПЕРВОГО экземпляра [. Я нашел десятки ответов в Интернете, но ни один из них не работает. Я проверил «0» перед командой, похоже, это общий ответ, но вместо этого вставляется имя файла NEWPERMS.





С ГНУ sed:
sed -i "
0,/\[/{
/\[/r $NEWPERMS
}" "$CURRENTPERMS"
Обратите внимание, что диапазон адресов 0,/regexp/ является расширением GNU.
Не уверен, что это имеет значение, но $NEWPERMS и $OLDPERMS — это json-файлы, в которых, конечно, много фигурных скобок.
@JeffreyVanLaethem Убедитесь, что ваш sed является GNU sed, и скопируйте команду дословно (встроенные символы новой строки имеют значение).
Ах, я перепутал с новыми строками. он работает при копировании как есть. Спасибо!
Спасибо за ответ! Попытка сделать это дает мне следующее: sed: -e выражение #1, char 0: unmatched `{'