2014-03-28 2 views
3

텍스트 파일은 아래와 같습니다. foovar 사이의 낮은 문자열을 대문자로 변경하고 싶습니다. 내가 한 라이너 sed 's/\(\foo\).*\(\var\)/\U\1\2/' testfile.txt 을 나오지도 사용하지만 난 당신이 뭔가 위가 될 수 있도록 \U을 사용할 수 있습니다두 문자열 사이의 소문자 문자열을 대문자로 바꾸려면 Sed를 입력하십시오.

FOOVAR 
lnlnl. 
FOOVAR 
+0

'sed' 표현식을보고 다양한 캡처 그룹을 관찰하면 얻을 수있는 결과를 파악할 수 있습니다! – devnull

답변

11

다음과 같은 출력을 얻을 사용하고

foo NSQLNQNSSLKQN var 
lnllnl. 
foo DKQDQ HNOQII var 

foo nsqlnqnsslkqn var 
lnlnl. 
foo DkqdQ HNOQii var 

내 예상 출력은 사례 :

단지 블록을 잡아, 귀하의 경우에는

$ sed -r 's/(..)(..)(.)/\U\1\E\2\U\3/' <<< "hello" 
HEllO 

하고 그에 따라 그 \U\E 장소 :

(210) 그리고 \E 변환을 중지

$ sed -r 's/(foo)(.*)(var)/\1\U\2\E\3/' file 
foo NSQLNQNSSLKQN var 
lnlnl. 
foo DKQDQ HNOQII var 
  • (foo)(.*)(var) 어획량 세 블록을 : foo, 다음 텍스트 및 var.
  • \1\U\2\E\3은 두 번째 것 (\U)을 업 케이싱 (동사입니까?)으로, 세 번째 것은 현재 케이스 (\E)를 사용하여 인쇄합니다.
    sed 's/\(foo \)\(.*\)\(var\)/\1\U\2\E\3/' file 
    

    그래서 당신이 .* 블록을 잡기되지 않은 것을 볼 수 있습니다, 그래서 당신은 단지 foovar를 다시 인쇄했다 : -r없이

는, 현재의 접근 방식이 더 유사 확인합니다. the manual of sed에서


: L \

는 \ U 또는 \ 전자가 발견 될 때까지 소문자로 교체를 돌려,

난 소문자로 다음 문자를 돌려 \

\ u 대문자로 바꾸기 unt 위원장 \의 L 또는 \ E는 \의 L 또는 \ U에 의해 시작 E 정지 사례 변환 \ u 다음 문자를 대문자로 돌려 \

,

, 발견된다.

관련 문제