내 파일에서 텍스트의 일부를 변경해야합니다. 나는/다른 JAVA_HOME을 포함하고있는 나의 PATH를 업데이트하기 위해 bash에 스크립트를 작성하려고한다. 내 정규식은 아래와 같은 경로가 포함 된 텍스트의 일부를 찾아서 sed 명령으로 바꿔야합니다.인용 부호를 사용하는 sed가있는 Regex
-
([/]) ^/:
는
/**/jdk/jdk.*/bin I는 정규식에 만든 ] ([/] jdk [/] jdk).? ([/] 함)
-
(/)
[^ /] (/ JDK/JDK).? (/ 빈)
. 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'
는 - '/ 빈'로 끝
은 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
작동하지 않는 샘플을 제공 할 수 있습니까? – PJProudhon