안녕하세요.
C로 작성된 소스를 전체적으로 replace해야 할 일이 생겼습니다. L"abcdefg" 를 _T("abcdefg") 이렇게 말이죠.
"abcdefg"를 살려서 '_T(' 과 ')' 만을 앞뒤로 넣어줄 방법이 없을까요?
도움을 부탁드립니다.
일반적으로 pattern 규칙에서 괄호를 씌우면, replacement 에서 \1 \2 처럼 \숫자 로 받을 수 있습니다. 괄호 씌운 순서대로 숫자가 매겨집니다.
https://xenosi.de/
결국 L" ..... " 패턴을
_T(" .... ") 로 바꾸시겠다는 거죠? (맞나요?)
vi 를 쓰신다면
:%s/L"\(.*\)"/_T\("\1"\)/g
이렇게 하시면 될 거 같네요...
L"우리나라" 를 _T("우리나라") 로 변경 하기
인라인 펄로 다음과 같이 할수 있습니다.
perl -pi -e 's/L"(.+)"/_T\("\1"\)/' [filename]
근데! 한가지 문제가 있습니다. 정규식에서 .+ 때문에 라인에서 line feed가 오기전에 변경대상이 여러번 있다면 여러개를 하나로 뭉쳐서 처리해 버린다는 겁니다.
더블쿼터안에 영문+숫자만 존재한다면 [A-Za-z0-9]+ 로 지정하면 해결되고 아니라면 명령어의 마지막 / 뒤에 패턴 변경자를 지정하여 "작은 일치 우선"을 할수도 있는데 변경자가 기억이 안납니다. :(
근데! 한가지 문제가 있습니다. 정규식에서 .+ 때문에 라인에서 line feed가 오기전에 변경대상이 여러번 있다면 여러개를 하나로 뭉쳐서 처리해 버린다는 겁니다. 더블쿼터안에 영문+숫자만 존재한다면 [A-Za-z0-9]+ 로 지정하면 해결되고 아니라면 명령어의 마지막 / 뒤에 패턴 변경자를 지정하여 "작은 일치 우선"을 할수도 있는데 변경자가 기억이 안납니다. :(
다른 경우는 모르겠고, Perl 이라면 *,?,+ 의 뒤에 다시 ?를 붙여서 (*?, ??, +?) 말씀하신 "작은 일치 우선"을 지정할 수 있습니다.
좋은 하루 되세요!
/U 혹은 (?U) 가 작은 일치 우선 입니다.
그리고 "(.+)" 의 경우는 "([^"]+)" 로 하는게 간단할것 같네요. :lol:
/U 혹은 (?U) 가 작은 일치 우선 입니다. 그리고 "(.+)" 의 경우는 "([^"]+)" 로 하는게 간단할것 같네요. :lol:
효진님 원츄입니다 :)
안그래도 NOT 연산자가 뭘까 몹시 궁금해 하던 차였습니다. 그런데 인라인 펄이라서 그렇다고는 생각하고 싶지 않지만 U는 안먹히더군요
p.s 저두 젠투 좋아라 합니다. :)
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
일반적으로 pattern 규칙에서 괄호를 씌우면, replacement
일반적으로 pattern 규칙에서 괄호를 씌우면, replacement 에서 \1 \2 처럼 \숫자 로 받을 수 있습니다. 괄호 씌운 순서대로 숫자가 매겨집니다.
https://xenosi.de/
결국 L" ..... " 패턴을_T(" .... ") 로 바꾸시
결국 L" ..... " 패턴을
_T(" .... ") 로 바꾸시겠다는 거죠? (맞나요?)
vi 를 쓰신다면
:%s/L"\(.*\)"/_T\("\1"\)/g
이렇게 하시면 될 거 같네요...
L"우리나라" 를 _T("우리나라") 로 변경 하기인라인 펄로 다
L"우리나라" 를 _T("우리나라") 로 변경 하기
인라인 펄로 다음과 같이 할수 있습니다.
perl -pi -e 's/L"(.+)"/_T\("\1"\)/' [filename]
근데! 한가지 문제가 있습니다.
정규식에서 .+ 때문에 라인에서 line feed가 오기전에 변경대상이 여러번 있다면 여러개를 하나로 뭉쳐서 처리해 버린다는 겁니다.
더블쿼터안에 영문+숫자만 존재한다면 [A-Za-z0-9]+ 로 지정하면 해결되고 아니라면 명령어의 마지막 / 뒤에 패턴 변경자를 지정하여 "작은 일치 우선"을 할수도 있는데 변경자가 기억이 안납니다. :(
[quote="gitagy"]근데! 한가지 문제가 있습니다.정규식
다른 경우는 모르겠고, Perl 이라면 *,?,+ 의 뒤에 다시 ?를 붙여서 (*?, ??, +?) 말씀하신 "작은 일치 우선"을 지정할 수 있습니다.
좋은 하루 되세요!
/U 혹은 (?U) 가 작은 일치 우선 입니다.그리고 "(.+)"
/U 혹은 (?U) 가 작은 일치 우선 입니다.
그리고 "(.+)" 의 경우는 "([^"]+)" 로 하는게 간단할것 같네요. :lol:
https://xenosi.de/
[quote="송효진"]/U 혹은 (?U) 가 작은 일치 우선 입니다.
효진님 원츄입니다 :)
안그래도 NOT 연산자가 뭘까 몹시 궁금해 하던 차였습니다.
그런데 인라인 펄이라서 그렇다고는 생각하고 싶지 않지만 U는 안먹히더군요
p.s 저두 젠투 좋아라 합니다. :)
댓글 달기