2013-08-23 5 views
2

설정 파일의 일부 경로를 바꾸려고합니다. 그렇게하기 위해 나는 sed를 사용하려고합니다. 내가 /tmp/tmp/tmp/config를 교체하고 bla.bla 그대로 유지하려는Sed는 첫 번째 공간까지 모든 문자를 바꿉니다.

-Djava.util.logging.config.file=/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

aaa/tmp/tmp/...를 대체합니다 :

$ 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

\ssed에 의해 지원되지 않습니다. 또한 +은 특별한 의미를 갖기 위해 역 슬래시를 사용해야합니다. 짧은

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

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

또는 : 나는 또한 아무것도 일치하는 것을 방지하기 위해 점을 백 슬래시 것

관련 문제