Используйте только sed и sed для подстановки в строке, начинающейся с определенной строки, только если! Exist

Я надеялся, что это сработает с использованием sed, но пока без кубиков:

sed '/^command=/ /\/opt\/home\/user/!s@/home/user/@/opt/home/user/@' authorized_keys

Обратите внимание, что @ - это просто забавный разделитель, который я выбрал для замены, чтобы упростить просмотр косых черт.

В основном я хочу, чтобы это регулярное выражение выполняло следующее: «В любой строке файла, начинающейся со строки: command =, тогда, если строка: / opt / home / user не существует, замените / opt / user на / opt / home / user "

Я знаю, что теоретически могу сделать это с помощью операторов if, greps и затем sed, но мне это кажется не изящным.Я почти уверен, что sed может сделать это сам в одном регулярном выражении, но любая комбинация, которую я пробовал, кажется, дает мне всевозможные синтаксические ошибки. Как ни странно, эти операторы регулярного выражения, используемые по отдельности, не дают никаких синтаксических ошибок в сочетании с заменой, только когда я пытаюсь их объединить, у меня возникают проблемы.

У кого-нибудь есть более элегантный способ сделать это с помощью sed? Или я был прав, предполагая, что операторы greps и if перед sed - лучший способ сделать это.

0
09.02.2019, 21:04
1 ответ

don_crissti посоветуйте элегантное решение в комментариях, но в образовательных целях здесь другой вариант

sed '/^command=/! b; \@/opt/home/user@! s@/home/user@/opt&@' authorized_keys
2
28.01.2020, 02:34

Теги

Похожие вопросы