2012-11-07 2 views
2

접두어를 유지하면서 문자열을 바꾸고 싶습니다.Regex : 주어진 접두어를 제외하고 접두사 캡처로 문자열 바꾸기

echo "foo-bar" | sed s/"[^(baz)]-bar"/$1-blah/ 
:

foo-bar => should return foo-blah 
baz-bar => should remain baz-bar 

내가 지금까지 가지고있는 최고의 교체 접두사의 마지막 문자를 트림 :

는 예를 들어, "(*)-bar" 같은 문자열은 "(*)""baz" 일치하는 경우를 제외하고 "(*)-blah"로 교체해야합니다

+0

'[^ (바즈)]'당신이하지 무슨 생각을 의미하지 않는다. '[^ ...]'는 대괄호 안에있는 문자 중 하나가 아닌 하나의 문자와 일치합니다. – Barmar

답변

3

사용 음화 표시기 :

s/(?<!baz)-bar/-blah/ 

대부분의 sed 구현에는 고급 정규 표현식 기능이 없지만 perl과 같은 최신 언어에서 작동해야합니다. 나오지와

1

:

$ echo "foo-bar" | sed '/^foo-baz/!s/^foo-.*$/foo-blah/' 
foo-blah 
$ echo "foo-baz" | sed '/^foo-baz/!s/^foo-.*$/foo-blah/' 
foo-baz 

내가 분해하는 경우 :

echo "foo-baz" | sed '/^foo-baz/!s/^foo-.*$/foo-blah/' 
         |  |||     | 
         + regex +|+ substitution part + 
           | 
           negation of regex 
관련 문제