sed 라는 외부 툴을 이용하여 바꿔치는 것이므로 ( windows 계열이면 cygwin 혹은 gnu tools for win 을 깔아보셔야 쓸 수 있을겁니다. )
순수하게 C 언어로 했다고 보기는 어려울 것입니다.
저 부분은 sed 라는 tool 의 매뉴얼을 살펴보시면 쉽게 아실 수 있습니다.
원하시는 부분은 생각보다 복잡할 수 있습니다.
특정 라인을 new line 을 기준으로 얻어내셔서 ( 혹은 carriage return ) fp 를 가져다 놓은 후,
만약 내용이 늘어날 수 있다면 fp 의 다음 new line 이후의 모든 내용을 다시 기록하셔야 하므로 이를 처리할 방법이 필요할 것입니다. ( 예를 들어 1 byte 만큼 특정 라인에 내용이 바뀌면서 길어진다면, 다음 줄 부터는 모두 1바이트씩 뒤로 밀려서 다시 기록되어야 할 테니까요. )
물론 내용이 줄어드는 경우도 마찬가지입니다.
내용이 대체되면서 길이가 변하지 않는 다면 비교적 쉽게 처리하실 수 있습니다.
일단 원하는 라인을 얻는 방법은 fp 를 이동시켜가며 new line 과 carriage return 의 개수를 세어보는 방법, 혹은 fgets 를 이용하여 ( ascii 라는 가정하에 ) 한줄씩 받아보는 방법도 있겠지요.
좀 그렇긴한데..
$> change a.out 10 before after
Hello World.
죄송한데요,
sed -n '%d,%dp' %s | sed -e 's/%s/%s/g'
이 부분 좀 설명해 주세요......
-----------------------------------------------
어머니,
그 이름만으로도 우리는 풍요로와 집니다.
효도합시다......
-----------------------------------------------
sed 라는 외부 툴을
sed 라는 외부 툴을 이용하여 바꿔치는 것이므로 ( windows 계열이면 cygwin 혹은 gnu tools for win 을 깔아보셔야 쓸 수 있을겁니다. )
순수하게 C 언어로 했다고 보기는 어려울 것입니다.
저 부분은 sed 라는 tool 의 매뉴얼을 살펴보시면 쉽게 아실 수 있습니다.
원하시는 부분은 생각보다 복잡할 수 있습니다.
특정 라인을 new line 을 기준으로 얻어내셔서 ( 혹은 carriage return ) fp 를 가져다 놓은 후,
만약 내용이 늘어날 수 있다면 fp 의 다음 new line 이후의 모든 내용을 다시 기록하셔야 하므로 이를 처리할 방법이 필요할 것입니다. ( 예를 들어 1 byte 만큼 특정 라인에 내용이 바뀌면서 길어진다면, 다음 줄 부터는 모두 1바이트씩 뒤로 밀려서 다시 기록되어야 할 테니까요. )
물론 내용이 줄어드는 경우도 마찬가지입니다.
내용이 대체되면서 길이가 변하지 않는 다면 비교적 쉽게 처리하실 수 있습니다.
일단 원하는 라인을 얻는 방법은 fp 를 이동시켜가며 new line 과 carriage return 의 개수를 세어보는 방법, 혹은 fgets 를 이용하여 ( ascii 라는 가정하에 ) 한줄씩 받아보는 방법도 있겠지요.
아마 fgets 가 좀 더 쉬운 방법이 될 것이라 생각합니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
덧붙여서...
1. fgets() or fopen(), fread()
> stdin으로 문자열을 입력을 받는다, 또는 파일로부터 입력을 받는다.
2. line_ptr = strchr( buf, '\n' ) or line_ptr = strchr( buf, '\r' )
> 라인피드 또는 커리지리턴을 찾는다. n - 1 번 호출한다. n은 10번.
> 9번째 라인과 11번째라인 두 군데의 포인터를 찾아 놓는다. 왜냐? 10번째 라인길이가 얼마인지 모르기 때문에...
3. strdup()
> 11번째라인부터의 내용을 다른곳으로 복사해놓는다.
4. write(), memset(), strcpy()
> 10번째라인에 새로운 내용을 덮어쓴다.
5. write(), memset(), strcpy()
> 아까 카피해둔 11번째 라인의 내용을 뒤이어 덮어쓴다.
6. 끝.
Hello World.
댓글 달기