2008-09-23 3 views
3

디렉토리를 반복적으로 검색하고 문자열이 발견 된 모든 파일에서 다른 문자열 (예 : http://production:port/URI)로 바꿔야합니다. 누구든지 도와 줄 수 있습니까?쉘 스크립트를 사용하여 반복적으로 디렉토리를 탐색하고 문자열을 바꿉니다.

스크립트가 수정 한 파일을 인쇄하고 검색/입력 패턴을 입력 매개 변수로 사용할 수 있다면 훨씬 더 좋습니다.

감사합니다.

+0

어떤 플랫폼입니까? 어떤 언어를 사용할 수 있습니까? –

답변

5

이 시도 :

find . -type f | xargs grep -l development | xargs perl -i.bak -p -e 's(http://development)(http://production)g' 

또 다른 방법을 조금 더 의견 :이 도움이

find . -type f | while read file 
do 
    grep development $file && echo "modifying $file" && perl -i.bak -p -e 's(http://development)(http://prodution)g' $file 
done 

희망을.

+0

이전 파일은 * .bak로 저장되며 간접적으로 "수정 한 파일 인쇄"요구 사항을 충족합니다. –

2

간접적 인 계층에서 이익을 얻는 것처럼 들립니다. (그렇다면 누가 그렇지 않겠습니까?)

나는 한 위치에 특별한 문자열을 가질 수 있다고 생각합니다. 런타임에 구성 설정을 참조하거나 빌드 할 때 올바른 문자열로 파일을 생성하십시오.

6

찾기. - 타입 f | xargs sed -i s/pattern/replacement/g

+0

추가 참고 사항 : 패턴에서 백 슬래시로 따옴표를 이스케이프해야합니다. ... sed -i s/\ "hello \"/ hi/g – nickf

+0

goooooooooooooood! – flybywire

+0

의 결과는'잘못된 명령 코드 '입니다 ..... ..... 가장 멀리있는 것은 다음과 같습니다.'find iPhone_Src/-type f | xargs sed -i ''-e/__ MyCompanyName __/Samsung Electronics, Inc./g'' .... 하지만 그 작업은 절반 밖에 안된다.'sed : iPhone_Src // GUI : in-place editing 만하면된다. 정규 파일에 대한 작업'..... Listing :'find iPhone_Src/-type f | xargs grep -1 -C 0 저작권 2>/dev/null | grep -v Samsung | 머리 바이너리 파일 iPhone_Src // image/demo_bt_feedback.png는 와 일치합니다. iPhone_Src // main.m : // Copyright __MyCompanyName__ 2010. 모든 권리는 저작권자의 소유입니다. 등 .' – Gabor

0

zsh을 사용하십시오. 따라서 고급 globing에서는 하나의 명령 만 사용할 수 있습니다. 예컨대 : 그것은 또한 당신이 원하는 것을 확실히되지 않습니다을 .svn/.cvs을 패치 때문에

sed -i 's:pattern:target:g' ./** 

HTH

1

은, 위의 작업 SVN/CVS 디렉토리 내에서 시도하지 마십시오. .svn 수정을 피하려면 예를 들어 find를 사용하십시오. - 타입 f | fgrep -v .svn | xargs sed -i 's/pattern/replacement/g'

관련 문제