2017-10-22 1 views
2

내 파일에서 텍스트의 일부를 변경해야합니다. 나는/다른 JAVA_HOME을 포함하고있는 나의 PATH를 업데이트하기 위해 bash에 스크립트를 작성하려고한다. 내 정규식은 아래와 같은 경로가 포함 된 텍스트의 일부를 찾아서 sed 명령으로 바꿔야합니다.인용 부호를 사용하는 sed가있는 Regex

. BASH_ENV

JAVA_HOME="/opt/jdk/jdk1.8.0_151" 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/jdk/jdk1.8.0_151/bin:example/not/for/change/bin" 

예상 출력

JAVA_HOME="/opt/jdk/jdk1.8.0_151" 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:CHANGED:example/not/for/change/bin" 

나오지 명령

sed -r 's#([/])[^\/]*([/]jdk[/]jdk).*?([/]bin)#CHANGED#g' ~/.bash_env 

질문 내가 그럴 필요
내 sed와 정규 표현식을 많이 사용했지만 작동하지 않거나 처음/bin에서 멈추지 않고 모든 경로를 변경합니다. 나는 그것이 질문 마크와 함께 문제라고 생각하지만 누군가가 나에게 조언을 줄 수 있을까? 또는 sed에 대한 정규식 작성에 도움이 될까요?

UPDATE.1 내 솔루션은

예를 작동하지 않습니다 예.BASH_ENV

PATH="/usr/local/sbin:/opt/jdk/jdk1.8.0_151/bin:/example/not/jdk/for/change/bin" 

내 나오지

sed -r 's#([/])[^\/]*([/]jdk[/]jdk).*?([/]bin)#CHANGED#g' ~/.bash_env 

지정된 결과

PATH="/usr/local/sbin:CHANGED" 

예상 된 결과

'/'
로 시작 - -
포함되어 있지 않습니다 (SED와)

정규식 단어 변경해야합니다 '를'
는 - 포함 'JDK/JDK'
는 - '/ 빈'로 끝

+0

은 https://www.gnu.org/software/sed/manual/sed.html#BRE-syntax 및 https://unix.stackexchange.com/questions/119905/why-does-my에서 볼 수 있습니다. - 정규 표현식 - x-but-in-y – Sundeep

+0

작동하지 않는 샘플을 제공 할 수 있습니까? – PJProudhon

답변

0

이 내가 검색 경로이 하나를 시도 때문에 같은 장소에 항상 아니라고 생각

echo $PATH | sed 's/\([^:]*\)/CHANGED/8' 

를 나오지도 시도 할 수 있습니다.

echo $PATH | sed 's#\(.*\)\(:/.*jdk[^:]*\)\(:.*\)#\1:CHANGED\3#' 

이 하나를 테스트 할 수 있습니다

echo $path | sed 's#\(.*\)\(:*\)\(/.*/jdk/jdk[0-9._]*/bin\)\(:*\)\(.*\)#\1\2CHANGED\4\5#' 

나는 종료 위치와 함께 중간에, 시작 위치와 함께하려고합니다.

+0

감사! 그러나 그것은 모든 경우에 적용되는 것이 아니라 특정 경우에만 작동합니다. – kukulam

+0

내 게시물을 업데이트합니다. 어디서나 괜찮습니다. –

관련 문제