Замените строку пробелом и обратную косую черту строкой, содержащей пробелы - PullRequest
0 голосов
/ 28 мая 2018

Я хочу заменить следующую строку:

--memory 20g \

на

--memory 100g \

Фактически он должен заменить любое число после --memory.Вот что я имею, но не могу получить ожидаемый результат.

sed -i -E -- "s/\b--memory.*/--memroy 100g \/g"  a.txt

1 Ответ

0 голосов
/ 28 мая 2018

Здесь вам не нужна расширенная поддержка регулярных выражений (-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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...