2017-02-22 2 views
1

내가이 명령을 사용하여 전역 문자열 대체의 마지막 발생을 대체하는 것,하지만 작동하지 않는 광고 목적 :Sed의는

echo "0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183+400)" | sed 's/\*\(.*\)+/*\1suma/g' 

이것은 예상 출력 :

0+223+141+800+450+1*(106suma400)+1*(1822suma500)+1*(183suma400) 

그러나 이것은이다 내가 얻은 것 :

0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183suma400) 

을 사용 했음에도 불구하고 마지막 사건 만 교체되는 것처럼 보입니다..

+0

으로 확장되었습니다. 제목은 "awk"이지만 제목과 태그는 약 sed입니다. 또한 "작동하지 않음"은 도움이되지 않습니다 - 정확히 어떻게됩니까? 당신의 결과는 무엇입니까? –

+0

0 + 223 + 141 + 800 + 450 + 1 * (1800 + 500) + 1 * (183suma400) – victorhernandezzero

+0

마지막 부분 만 변경 – victorhernandezzero

답변

0

시도 다음

0+223+141+800+450+1*(106suma400)+1*(1822suma500)+1*(183suma400) 

트릭이 sed 년대 변함 욕심 매칭을 피하기 위해, 그래서 식 [^+]*가되도록 대신 .* 사용된다 : 산출

echo "0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183+400)" | 
    sed 's/\(\*([^+]*\)+/\1suma/g' 

다음에+까지만 일치시킵니다. 때문에 욕심 일치에 - - 당신의 시도는 의도 한 패턴의 마지막 발생을 교체하지 않았지만


참고는 대체 여러 구성 패턴에 걸쳐 만 일치를 발견 : 마지막+ 리터럴 리터럴 첫 *에서 모든 것을 캡처 그룹 \1 theref -

\*\(.*\)+*(106+400)+1*(1822+500)+1*(183+ 일치 광석이 (106+400)+1*(1822+500)+1*(183

+0