2013-12-08 3 views
1

3 개의 매개 변수를 사용하고 이러한 매개 변수를 기반으로 텍스트 대체를 수행하는 쉘 스크립트가 있습니다. 첫 번째 매개 변수는 바꿀 텍스트이고 두 번째 매개 변수는 바꿀 텍스트이며 세 번째 매개 변수는 파일 이름입니다. 파일 이름에 공백이 있으면 스크립트가 작동합니다. 나는 파일명을 파싱하도록 sed를 얻는 방법을 모르며 두 파일로 나누지 않습니다.쉘 스크립트의 파일 이름 공백 처리

./script replacethis withthis on this.txt 

이름 on this.txt 두 가지로 나뉩니다

#! /bin/sh 
oldString=$1 
newString=$2 
file=$3 

oldStringFixed=$(echo "$oldString" | sed -e "s/\("\''[]*^+\.$[-]\)/\\\1/g') 

sed -e "s/$oldStringFixed/$newString/g" "$file"> newfile.updated 
mv newfile.updated "$file" 

처럼 호출하면 다음과 같이 스크립트의 현재 버전입니다. 누구든지 이름에 공백이있는 파일을 다루는 방법을 설명 할 수 있습니까?

./script "replace this" "with that" "on this.txt" 

답변

1

은 스크립트에서하는 것처럼, 명령 줄에서 공백으로 파일 이름을 견적 문제는 스크립트가 아니라 호출에 있습니다.

./script replacethis withthis "on this.txt" 
0

주요에게 : 심지어 oldStringnewString에 대해 여러 단어를 지정할 수

./script replacethis withthis "on this.txt" 

:

+0

답변 해 주셔서 감사합니다. 나는 당신의 방법을 시도하고 그것은 작동하는 것처럼 보였다. 이 동작이 스크립트 내부에서 자동화 될 수있는 방법이 있습니까? – user3074091

+0

파일 이름 참조를 큰 따옴표로 묶어야합니다. globbing 표기법 ('* .txt' 등)은 따옴표로 묶을 수 없지만 참조 할 변수'$ file'가있을 때마다 참조가 큰 따옴표로 묶여 있는지 확인하십시오 :'cat "$ file" '등. –

0

은 내가 주말에 배쉬에 액세스 할 수없는,이 테스트를하지만,

을 시도 할 수 없습니다 당신은 쉘이 하나의 인자로 볼 수 있도록 따옴표로 이름을 묶어야합니다
oldString=$1 
newString=$2 
shift 2 
file="$*" 
echo $* 
+0

"주말에 배쉬에 접속할 권한이 없습니다." – dibs

관련 문제