여러 파일이 #include "~~.h"라고 ""를 써서 헤더를 참조하고 있습니다. 헤더 파일도 여러개가 있구요. 이것들을 <~~.h>로 바꾸고 싶은데 정규 표현식으로 어떻게 해야될까요?
제 생각에 #include "\(*\)" 로 검색하면 될까 했는데 잘 안되네요. 또 검색도 문제지만 수정은 어떻게 해야할지 모르겠습니다.
iamroot.org
"#include"([\t ]+)(\")([a-zA-Z0-9.]+)(\")([\t ]*)\n
감사합니다. 그냥 *만 하는게 아니었네요 ;-)
그런데 검색은 됩니다만 대체할 텍스트를 어떻게 입력해야 할까요?
---- 섬기며 사랑하면 더 행복해집니다. 나불나불 블로그 - http://gurugio.blogspot.com/ 몸에 좋은 칼슘이 듬뿍담긴 OS 프로젝트 - 칼슘OS http://code.google.com/p/caoskernel/
ㅈㅅ합니다. 정규표현식으로 검색하셔서 c같은 언어로 치환하시는줄 알고 적엇는데 지금 lex 책이 없어서 기억이 나는대로만 적엇기 때문에 더 적을 수는 없어요
acroedit 정규표현식으로는 "#include"([\t ]+)(\")([a-zA-Z0-9.]+)(\")([\t ]*)\n "#include"$1<$3>$5\n 이군요
([a-zA-Z0-9.]+)를 unsouled님처럼 (.+)나 ([^\n]+)로 바꾸어도 된답니다.
루비로 간단히 현재 디렉토리 내의 *.c 에서 #include "~~.h" 를 #include <~~.h> 로 바꾸는 스크립트 짜봤습니다.
실행시켜보려면 기존 소스 백업 하시고 실행해 보세요.
잘못돼서 소스 날려도 책임은 못집니다;;
entries = Dir.entries(".").find_all { |e| e.match /\.c$/ } entries.each do |e| file = File.open(e) source = file.read File.open(file, 'w+') { |f| f << source.gsub(/#include \"(.*?)\"/, '#include <\1>') } end
감사합니다. 루비가 좋긴 좋네요.
저라면 거의 대부분의 편집기에 있는 "찾아 바꾸기"기능을 이용해서
#include" -> #include<
.h" -> .h>
이렇게 두번에 걸쳐서 작업을 할 것 같습니다. notepad++에는 파일 여러개를 지정해서 그 파일들에 대해 찾아바꾸기를 해주는 기능도 있지요. 정규식을 잘 몰라서 그냥 적당히...-_-;
-------------------------- 피할 수 있을때 즐겨라!http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
저라도 이렇게 할 것 같습니다.
일을 꼭 폼나게 할 필요는 없다고 보는데...
뭐 본문 쓰신 분이 이미 해결하셨다지만...
저렇게 두 번 바꾸는게 그냥 눈으로 보면서 처리할 때는 상관이 없는데, 다수의 파일, 그 안에 수백 수천개의 라인이 있을때는,
printf("see readme.h");
뭐 지금같은 경우는 위의 예는 좀 어거지 같기도 하고 ^^; 또 정규식을 쓰더라도 여전히 이렇게 바꾸면 안 될 곳을 바꾸는 위험은 존재합니다만, 가능성을 줄일 수 있으면 줄이는 게 좋을테니까요.
좋은 하루 되세요!
vim 에서는
:1,$s/^\#include\s*"\(.*\.h\)"/#include <\1>/g
정도로 치환하시면 되겠네요.
파일이 다수라면, 이 치환을 명령행 인자로 주어서 vim 을 돌리면 되겠죠.
$ vim -c '1,$s/^\#include\s*\"\(.*\.h\)\"/#include <\1>/g' -c 'wq' 파일1.c
$ for FILE in *.c > do > vim -c '1,$s/^\#include\s*\"\(.*\.h\)\"/#include <\1>/g' -c 'wq' $FILE > done
vim 자체에 인자로 다수의 파일 이름을 줘서 일괄적용시킬 수도 있긴 있을 것 같은데 방법을 저는 모르겠네요.
아시겠지만, 이런 건 적당한 가정 (#include 문은 항상 라인 제일 앞에 공백 없이 바로 쓰인다거나)이 들어간 거라서... 그래도 나중에 diff 를 돌리거나 해서 검사는 하셔야 할 듯 합니다.
도움 감사합니다.
결국 이렇게 처리했습니다. 이맥스에서 되는 것이고, 다른 에디터는 조금씩 다를것 같습니다.
#include "\(.+\)" ===> #include <\1>
텍스트 포맷에 대한 자세한 정보
<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]
iamroot.org
iamroot.org
"#include"([\t ]+)(\")([a-zA-Z0-9.]+)(\")([\t ]*)\n
"#include"([\t ]+)(\")([a-zA-Z0-9.]+)(\")([\t ]*)\n
감사합니다. 그냥 *만
감사합니다. 그냥 *만 하는게 아니었네요 ;-)
그런데 검색은 됩니다만 대체할 텍스트를 어떻게 입력해야 할까요?
----
섬기며 사랑하면 더 행복해집니다.
나불나불 블로그 - http://gurugio.blogspot.com/
몸에 좋은 칼슘이 듬뿍담긴 OS 프로젝트 - 칼슘OS http://code.google.com/p/caoskernel/
iamroot.org
ㅈㅅ합니다.
정규표현식으로 검색하셔서 c같은 언어로 치환하시는줄 알고 적엇는데
지금 lex 책이 없어서 기억이 나는대로만 적엇기 때문에 더 적을 수는 없어요
acroedit 정규표현식으로는
"#include"([\t ]+)(\")([a-zA-Z0-9.]+)(\")([\t ]*)\n
"#include"$1<$3>$5\n
이군요
([a-zA-Z0-9.]+)를 unsouled님처럼 (.+)나 ([^\n]+)로 바꾸어도 된답니다.
루비로 간단히 현재
루비로 간단히 현재 디렉토리 내의 *.c 에서 #include "~~.h" 를 #include <~~.h> 로 바꾸는 스크립트 짜봤습니다.
실행시켜보려면 기존 소스 백업 하시고 실행해 보세요.
잘못돼서 소스 날려도 책임은 못집니다;;
감사합니다. 루비가
감사합니다.
루비가 좋긴 좋네요.
----
섬기며 사랑하면 더 행복해집니다.
나불나불 블로그 - http://gurugio.blogspot.com/
몸에 좋은 칼슘이 듬뿍담긴 OS 프로젝트 - 칼슘OS http://code.google.com/p/caoskernel/
저라면 거의
저라면 거의 대부분의 편집기에 있는 "찾아 바꾸기"기능을 이용해서
#include" -> #include<
.h" -> .h>
이렇게 두번에 걸쳐서 작업을 할 것 같습니다. notepad++에는 파일 여러개를 지정해서 그 파일들에 대해 찾아바꾸기를 해주는 기능도 있지요. 정규식을 잘 몰라서 그냥 적당히...-_-;
--------------------------
피할 수 있을때 즐겨라!
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
저라도 이렇게 할 것
저라도 이렇게 할 것 같습니다.
일을 꼭 폼나게 할 필요는 없다고 보는데...
뭐 본문 쓰신 분이
뭐 본문 쓰신 분이 이미 해결하셨다지만...
저렇게 두 번 바꾸는게 그냥 눈으로 보면서 처리할 때는 상관이 없는데, 다수의 파일, 그 안에 수백 수천개의 라인이 있을때는,
이런 걸 다 치환해버리니 와르르 컴파일 에러가 나겠죠.
뭐 지금같은 경우는 위의 예는 좀 어거지 같기도 하고 ^^; 또 정규식을 쓰더라도 여전히 이렇게 바꾸면 안 될 곳을 바꾸는 위험은 존재합니다만, 가능성을 줄일 수 있으면 줄이는 게 좋을테니까요.
좋은 하루 되세요!
vim
vim 에서는
정도로 치환하시면 되겠네요.
파일이 다수라면, 이 치환을 명령행 인자로 주어서 vim 을 돌리면 되겠죠.
이걸 각 파일에 대해 돌리면 되니까 리눅스 bash 쉘이라면
vim 자체에 인자로 다수의 파일 이름을 줘서 일괄적용시킬 수도 있긴 있을 것 같은데 방법을 저는 모르겠네요.
아시겠지만, 이런 건 적당한 가정 (#include 문은 항상 라인 제일 앞에 공백 없이 바로 쓰인다거나)이 들어간 거라서... 그래도 나중에 diff 를 돌리거나 해서 검사는 하셔야 할 듯 합니다.
좋은 하루 되세요!
도움
도움 감사합니다.
결국 이렇게 처리했습니다. 이맥스에서 되는 것이고, 다른 에디터는 조금씩 다를것 같습니다.
#include "\(.+\)" ===> #include <\1>
----
섬기며 사랑하면 더 행복해집니다.
나불나불 블로그 - http://gurugio.blogspot.com/
몸에 좋은 칼슘이 듬뿍담긴 OS 프로젝트 - 칼슘OS http://code.google.com/p/caoskernel/
댓글 달기