2013-03-22 2 views
0

현재 여러 곳에서 그림을 변경하려는 프로젝트에서 작업 중입니다.greping 및 2 개의 파일 경로 바꾸기

old file dir: /images/icons/helpPop.png 
    new file dir: /public/website_pngs/icons-buttons/button_question_mark.png 

나는

grep -rl 'images/icons/helpPop' . | xargs sed -i 's/images/icons/helpPop/public/website_pngs/icons-buttons/button_question_mark/g' 

을 시도하려는하지만 그 작동하지 않습니다 알고있다. 나는 분리 문자를보고 있는데, 몇 가지 추가적인 조언을 부탁드립니다.

+0

: 당신이 /를 사용하는 것처럼 당신이 모양이 예를 들자면, "설정"구분 기호가, 단지 그것을 사용할 필요가 없습니다

네가하려는 일을 분명히해라. 이전 위치에서 새로운 위치로 파일을 옮기고 싶습니까? –

답변

0
for i in grep -rl 'images/icons/helpPop' . ; do cp $i $i.bak; sed -i 's/images\/icons\/helpPop/public\/website_pngs\/icons-buttons\/button_question_mark/g' < $i.bak > $i; done 
+0

끝에/g은 파일 이름이 아닙니다. 그렇게 바뀔까요? –

+0

/g은 "문자열의 모든 인스턴스를 바꿉니다"를 의미합니다. 그렇지 않으면 첫 번째 인스턴스를 바꾼 다음 다음 파일로 이동합니다. –

0

나는 구분 기호로 찾고 있어요 및 몇 가지 추가 조언을 바랍니다 싶습니다.

몇 가지 제안 :

  • 이전/새 DIRS가 고정 된 경우, 예를 들어, 나오지도에서
  • 사용하는 다른 구분 변수로 저장하려고 "s#$old#$new#g" or "[email protected][email protected][email protected]"
  • 더 안전하려면 이전의 dir 텍스트에서 . (period/dot)을 탈출하는 것이 더 좋습니다. 정규 표현식에서 any char을 나타 내기 때문입니다. 그것 그런 평범한 텍스트와 위험한 작업이 될 수 있습니다. (운 좋게도 경로에 .*이 없으므로^_ ^)

또는 작업 코드를 원하십니까? 코멘트

편집 : 그것은 아니다

kent$ echo "/////"|sed 's#/#?#g' 
????? 

kent$ echo "/////"|sed 's^/^?^g' 
????? 

kent$ echo "/////"|sed 's%/%?%g' 
????? 

kent$ echo "/////"|sed 's;/;?;g' 
????? 
+0

더 사용 하시려면/구분 기호를 설정하는 방법을 알고 싶습니다 –

+0

@SariRahal ** 편집 ** – Kent

+0

참조이 BC와 문제가 있습니다. cygwin에서 sed가 없습니다 –

관련 문제