Здесь вам не нужна расширенная поддержка регулярных выражений (-E
), POSIX-ly вы можете просто сделать, как показано ниже.Идея состоит в том, что вам нужно дважды экранировать метасимвол \
, чтобы сделать его буквальным
sed 's/--memory \(.*\) \\/--memory 100g \\/g' a.txt
или, если вы уверены, что он будет 20g
все время, используйте строку напрямую,
sed 's/--memory 20g \\/--memory 100g \\/g' a.txt
Единственное преимущество использования \(.*\)
заключается в том, что вы можете заменить все, что может произойти в этом месте..*
является жадным выражением для сопоставления с чем угодно, а в POSIX sed
(базовые регулярные выражения) вам нужно экранировать захваченную группу как \(.*\)
, тогда как если вы делаете то же самое с включенным флагом -E
(в GNU /FreeBSD sed
) вы можете просто сделать (.*)
.Также используйте привязки регулярных выражений ^
, $
, если вы хотите сопоставить точную строку и не разрешать sed
заменять текст в местах, которые вам не нужны.Та же операция с ERE
sed -E 's/--memory (.*) \\/--memory 100g \\/g' file