텍스트 검색 및 대치 스크립트
글쓴이: wagnerian / 작성시간: 토, 2005/05/14 - 2:41오전
FreeBSD, C 셸에서
모든 html 파일을 읽어들여(서브디렉토리까지 뒤지면 더 좋음)
wagnerian.system-halt.com
요놈을
wagnerian.new21.org
요렇게
바꾸려고 하거든요.
별것 아닌 것 같으면서도 제가 어설프게 배워서
잘 안 되네요.
그러니까, vi 에디터에서
:1,$ s/system-halt.com/new21.org/g
이렇게 하면 되더란 말이죠.
이걸 여러 파일을 한꺼번에 고치고 싶어요.
#! /bin/csh
foreach html ( $argv )
tr 'system-halt.com' 'new21.org' < $html > $html.1
end
왜 안 될까요? ㅠ.ㅠ
tr이 아니라 sed인가... ㅡㅡ;
유닉스 책 봐도 아리까리, man 명령어 쓰니 더 모르겠고.. ㅠ.ㅠ
누가 좀 도와주실래요?
Forums:
#!/bin/cshforeach html ( $argv )sed
#!/bin/csh
foreach html ( $argv )
sed 's/system-halt.com/new21.org/' < $html > $html.1
end
안되는군요. ㅡㅡ;
.org/g' 요렇게 바뀌어야 맞는 거죠? 그런데 이렇게 해도 안 되네요.
프롬프트에서 sed 구문만 쓰면 되는데 스크립트로는 안 됩니다.
이걸 bourne 셸 스크립트로 고치면 어떻게 될까요?
저는 그대로도 잘 되던데요.bash 환경에서 ./temp.sh a
저는 그대로도 잘 되던데요.
bash 환경에서 ./temp.sh a.htm b.htm && cat a.htm a.htm.1 b.htm b.htm.1로 잘 되는 것을 확인하고 올린 글이였습니다. csh는 tcsh였습니다. 다시 해보니 tcsh 환경에서도 잘 되네요.
사용환경:
데비안 최신 bash, tcsh, sed
시그윈 최신 bash, tcsh, sed
sed 's/<search>/<replace>/'
sed 's/<search>/<replace>/' 에서 <search>의 도트(.)는 아무거나 한문자 매칭때문에 '\.'이렇게 이스케이프 시켜야 하지 않나요?
bourne 셸에서 실행하면 이렇게 됩니다:/wecan2/wagn
bourne 셸에서 실행하면 이렇게 됩니다:
/wecan2/wagnerian/bin/renhtm: line 2: syntax error near unexpected token `('
/wecan2/wagnerian/bin/renhtm: line 2: `foreach html ( $argv )'
그리고 도트를 고쳐도 소용이 없네요. ㅠ.ㅠ
/bin/csh는 존재하고 있는 것이 맞나요?sh renhtm로
/bin/csh는 존재하고 있는 것이 맞나요?
sh renhtm로 실행하셨다면 그냥 renhtm을 실행은 해보셨나요?
정확히 어떻게 실행하셨는지 자세한 정보를 제공해주시기 바랍니다.
좋은 답을 바라시면 자세한 질문을 해주셔야 도움 드릴 수 있습니다.
http://wiki.kldp.org/wiki.php/%C3%CA%BA%B8%C0%DA%C4%DA%B3%CA#s-2
---
스크립트 실행이 안되는데 sed의 도트는 당연히 소용이 없죠. (필요 없다는 얘기는 아닙니다.)
[code:1]#!/bin/bashfor I in "$@
csh를 bash로 전환한 소스입니다. 하부 디렉터리 처리는 스스로 방법을 찾아보세요.
윈도우즈용으로 포팅된 sed를 받아서 윈도우즈 배치파일로 해결했습니다.
윈도우즈용으로 포팅된 sed를 받아서 윈도우즈 배치파일로 해결했습니다. ㅡ,.ㅡ 도와주신 분들께 감사드립니다.
댓글 달기