2013-08-23 3 views
2

Я пытаюсь заменить некоторые пути в файле конфигурации. Для этого я пытаюсь использовать sed.Sed заменить все символы до первого места

Мой файл выглядит примерно так:

-Djava.util.logging.config.file=/tmp/tmp/tmp/config bla.bla 

Я хочу, чтобы заменить /tmp/tmp/tmp/config и держать bla.bla нетронутыми. Согласно http://regexpal.com/ и http://regexr.com?362qc я должен использовать

sed -e 's/logging.config.file=[^\s]+/logging\.config\.file\=\/new/g' file

Но он не работает.

ответ

2

Это заменит /tmp/tmp/... с aaa:

$ sed 's/\(.*=\)[^ ]* \(.*\)/\1 aaa \2/g' <<< "-Djava.util.logging.config.file=/tmp/tmp/tmp/config bla.bla" 
-Djava.util.logging.config.file= aaa bla.bla 

Это "экономит" что-нибудь до = в \1. Затем извлекает все до места. Наконец, «сохраняет» остальную часть строки в \2.

Замена выполняется путем эха \1 + «новая строка» + \2.

1

\s не поддерживается sed. Кроме того, + должен быть обратным, чтобы получить свое особое значение. Я хотел бы также обратную косую черту точки, чтобы предотвратить их соответствие ничего:

sed -e 's/logging\.config\.file=[^[:space:]]\+/logging\.config\.file\=\/new/g' 

или, короче

sed -e 's%\(logging\.config\.file=\)[^[:space:]]\+%\1/new%g' 
Смежные вопросы