vi 치환정규식을 perl 정규식으로 바꾸고 싶습니다.
글쓴이: johlim / 작성시간: 화, 2005/07/19 - 8:07오후
제가 VI에서 사용하는 정규식입니다.
g/^,\+.*[^\"]$/s/[^\"]$/\"/gc
이걸 펄에서 사용하고 싶습니다.
어떻게 해야하는지요 ?
현행
gvim *.txt 로 여러파일을 일단 오픈한뒤
위 정규식으로 치환하고 "wn" 해서 다음 파일 넘어가서
다시 반복적으로 위 정규식으로 변환합니다.
하고 싶은 방법
perl script에
변환할 파일목록 담아놓고
해당 파일에 대해서 치환 정규식을 적용하고싶습니다.
사용환경 WIN32 Perl , GVIM
참고로 치환정규식 내용은
, 으로 시작하는 한줄을 찾아서 끝에 "가 없으면 "을 추가
Forums:
[code:1]$ cat test.dat,blahblah,blah
perl은 stdin 또는 파일 인수 전체를 읽을 수 있는 핸들을 가지고 있고, p 옵션은 주어진 펄 스크립트(파일로 주어질 수도 있고, -e로 주어질 수도 있습니다)가 이 핸들을 라인 단위로 반복하면서(while gets) 실행될 수 있게 해줍니다. 이 입력 핸들은 기본 값이 readonly인데, i 옵션(in-place)이 있으면 이 입력 핸들을 write 할 수 있습니다.
----
http://nohmad.tumblr.com/
WIN환경이라서 그런지 제대로 동작하지 않아서 다시 문의드립니
사용환경 PC(WINXP)에서 Active Perl 5.6.1 사용중입니다.
다시 한번 부탁드리겠습니다.
원자료
,bbbb
#bbbb
bbbb
bbbb"
치환을 통해서 얻고 싶은 형태
,bbbb" <- 이것만 변경
#bbbb
bbbb
bbbb"
A better tomorrow
윈도우 커맨드라인이 -e 실행 인수에 영향을 주는 것 같군요. 그럴 때는
윈도우 커맨드라인이 -e 실행 인수에 영향을 주는 것 같군요. 그럴 때는 파일에 저장한 후에 사용하면 됩니다. 지금 주변에 펄이 깔린 윈도우 머신이 없어서 테스트는 못해봤습니다. -e 실행구문을 test.pl로 만들고, in-place 옵션에 백업 파일을 지정했습니다.
i.bak 이라고 쓴 것은 대상 파일을 변경시키기 전에 원본 파일명 뒤에 .bak이 붙은 파일을 복사본으로 만들어놓고 원본 파일을 변경시킵니다. 원하는 대로 변경되었는지 확인해보고 지우면 됩니다. 윈도우에선 in-place 옵션에서 백업 파일을 만드는 것이 강제사항인가 보군요.
----
http://nohmad.tumblr.com/
역시 원도우즈 환경이라..
알려주신대로는 또 에러가 나구요
perl -p test.pl source > result
이런식으로 사용가능했습니다.
하지만 내용이 변환결과가 이상합니다.
변환후 쓸데없이 " 가 다음줄에 하나 더 붙습니다.
아마 내용상으로 특수문자가 line에 있으면 이상하게 변환되는것 같아요
결과
vi에서 perl 로 바꾸기 참 어렵네요 --a
감사합니다.
A better tomorrow
바꾸기가 어렵다면 vim 을 커맨드라인에서 실행해도 됩니다.[co
바꾸기가 어렵다면 vim 을 커맨드라인에서 실행해도 됩니다.
vim -c 'g/^,\+.*[^\"]$/s/[^\"]$/\"/gc' -c 'wq' file
https://xenosi.de/
Re: 역시 원도우즈 환경이라..
제가 정규식 결과를 제대로 확인 안했군요. :$
다음 식은 일단 제대로 돌아갈 것 같습니다.
----
http://nohmad.tumblr.com/
잘되네요.. 아 이제 -- 손이 좀 편해질것 같습니다.
근데 perl 정규식에서 \1\2는 무슨의미죠
감사합니다.
A better tomorrow
혹시하는 마음으로 해보았는데 vim 커맨드가 명령창에서 잘 이해
혹시나 해보았는데 동작하지 않는군요
에러메세지는 "명령구문이 틀립니다"
사용환경 Windows XP (gvim)
A better tomorrow
[code:1]perl -p -e "s/^,(.+?&
첫분이 다 가르쳐주셨는데, 쉘 구문이 틀려서 그렇습니다. 유닉스 쉘에서는 argument를 ''로 감싸지만, 윈도에서는 ""로 감싸므로, -e 옵션 다음에 주는 인라인 코드는 ""로 싸줘야 쉘이 펄에 코드를 맞게 넘길 수 있습니다.
\1, \2는 back-reference라고 부르는 것으로, 괄호로 싸인 부분에 매치된 부분 문자열을 저장하고 있는 특수 변수입니다.
[/code]
...
[code:1]#!/usr/local/bin/perl -wuse
perl 도 좋습니다만, vim 의 기능으로 해결이 가능합니다.gvi
perl 도 좋습니다만, vim 의 기능으로 해결이 가능합니다.
gvim *.txt 와 같이 여러 파일을 오픈한다음,
:bufdo! g/^,\+.*[^\"]$/s/[^\"]$/\"/g | update
와 같이 하면 됩니다.주의할 점은 치환식이 잘못된 경우 복구할 수가 없다... 는 것이지만
이 경우엔 해당이 안되겠군요 :D
훗, 못 믿겠나?
댓글 달기