Мой input
файл содержит текст, который необходимо изменить.Например, у него есть несколько возможностей:
CONSTANT change/me !KEY2 !KEY3
CONSTANT change/me
CONSTANT change/me !DIFFERENTKEY
Всегда существует постоянный ключ (т. Е. CONSTANT
), который не изменяется.Существует также возможность различных ключевых слов после текста, который необходимо заменить.Они обозначены восклицательным знаком (!
), и не может быть других ключевых слов или тысяч.Меня интересует только замена текста после CONSTANT
и любых возможных клавиш, начинающихся с !
.Желательно использовать sed
.
Ниже приводится мой ожидаемый результат.change/me
в input
необходимо заменить на changed
;
CONSTANT changed !KEY2 !KEY3
CONSTANT changed
CONSTANT changed !DIFFERENTKEY
Я пробовал разные вещи, найденные в ответах ( здесь и здесь , здесь ) на SO, но я не могу понять это.Самый близкий, который я получил, был от этой ссылки.
sed -r 's/(^CONSTANT) (.+?) (\!.*$)/\1 changed \3/g' input
Что приводит к;
CONSTANT changed !KEY2
CONSTANT change/me
CONSTANT changed !DIFFERENTKEY
Я пробовал разные комбинации, но на этомЯ чувствую, что я просто стреляю в темноте.
Условия:
CONSTANT
не меняется change/me
произвольный текст также может быть blahblah
, который необходимо заменить - A
!KEY
не обязательно должен присутствовать - A
!KEY
может присутствовать и может быть несколько из них, но всегда разделяется пробелом.Я хочу сохранить CONSTANT
и любые возможные !KEY
с.