1787 번 글의 답장글: Re: grep, sed, awk.... 노가다에서 벗어나고 싶어요.. |
글쓴이: 산이
[홈페이지]
|
글쓴날: 2003년 11월 25일 01:03:55 화(새벽) |
조회: 625 |
[내인생의 태클]님이 남기신 글:
>-----------------------------------------
>답변자가 기본적으로 참고할 내용입니다.
>- 배포판(옵션) : 레드햇계열
>- 커널버전(옵션)
: 2.4.XX
>- 데몬버전(예:apache
1.3.27) : Apache 1.3.28
>- 데몬설치유형(RPM/컴파일/기타)
: bash....
>-----------------------------------------
>
>안녕하세요.
>적수네에서 검색하다 우연히 이곳을 알았습니다.
>php로 사이트를 만들고 있는중인데요...
>아시다시피 루트문서아래에
여러 디렉토리가 있잖아요...
>
>가령 /usr/local/apache/htdocs/board <-- php 문서들이
있습니다.
>
>$include_path="/usr/local/apache/htdocs/";
>이것을
>$include_path="/home/aaa/public_html/";
>이걸로 바꿔줘야 하거든요....
>
>참고로 루트아래 스크립트의 갯수가 대략 7~80개 정도
됩니다.
>모든 스크립트에 위의 변수가 있습니다.
>그 많은 스크립트들을 일일이 바꾸는건 끔찍합니다.
>왜냐하면 자주 바꿔주어야 하거든요...
>
>제 나름대로 생각해본게 grep이나 sed를 사용해서 쉘스크립트로
만들어 볼까했는데 막상 만들어볼려고하니
기초지식이 너무 없네요.
>조언 부탁드립니다.
========================================
조건이 *.php 파일이고
바꿀 문자열이 /usr/local/apache/htdocs/ --> /home/aaa/public_html/
이라면 비교적 쉽습니다.
현재 바꿀 *.php 파일이 있는 디렉토리중에서
상위의 디렉토리로
이동합니다.
바꾸기 전에 디렉토리를 통째로 백업해 놓은것이 좋겠지요...?
$ pwd
/any/path/to/docroot
$ cp -a /any/path/to/docroot /tmp/
그리고
$ find . -name "*.php" -type f | xargs grep '$include_path'
이렇게 하면 바꿀 파일과 그 내용이 출력됩니다.
이것은
$ find . -name "*.php" -type f | xargs grep "\$include_path"
와 같습니다. ' 와 " 를 서로 구별해서 아무거나 하나
사용하면 됩니다.
이제는 진짜로 문자열을 바꾸어줘야 하는데
$include_path="/usr/local/apache/htdocs/";
$include_path ="/usr/local/apache/htdocs/";
$include_path= "/usr/local/apache/htdocs/";
$include_path = "/usr/local/apache/htdocs/";
$include_path='/usr/local/apache/htdocs/';
이렇게 각양각색으로 코딩되어 있다면 패턴일치가 조금 복잡해
집니다.
sed 의 패턴일치 정규표현식은
's/$include_path\s*=\s*"\?\/usr\/local\/apache\/htdocs\/"\?/$include_path=
"\/home\/aaa\/public_html\/"/'
이렇게 복잡해 집니다.(한줄임)
현재 대상 파일이 80 개 정도로 그리 많지 않기 때문에
복잡하게 생각할 필요 없이 다음과 같이 쉘스크립트를 짜세요.
-----------------------------
#!/bin/sh
target_dir="/path/to" ## php 파일이 있는 디렉토리 절대
경로지정
lists=$(find "$target_dir" -name "*.php" -type f)
## IFS 는 ' 에서 ENTER 키를 누르고 그 다음줄에 ' 가 옵니다.
IFS='
'
from_str='$include_path="/usr/local/apache/htdocs/"' ## 기존 문자열
to_str='$include_path="/home/aaa/public_html/"' ## 바꿀 문자열
for file in $lists ; do
result=$(grep "$from_str" "$file")
if [ X"$result" != "X" ] ; then
sed "s;${from_str};${to_str};g "$file" > ${file}.newfile
mv -f "${file}.newfile" "$file"
echo "changed : $file"
fi
done
exit 0
---------------------------
예전에 제가 많이 써 먹었던 방법입니다.
(테스트해 보시고 실행하세요...)
|
이전글 : grep, sed, awk.... 노가다에서 벗어나고 싶어요..
다음글 : Re: Re: grep, sed, awk.... 노가다에서 벗어나고 싶어요..
|
from 61.254.74.228
JS(Redhands)Board 0.4 +@
|
|