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"
답변 해 주셔서 감사합니다. 나는 당신의 방법을 시도하고 그것은 작동하는 것처럼 보였다. 이 동작이 스크립트 내부에서 자동화 될 수있는 방법이 있습니까? – user3074091
파일 이름 참조를 큰 따옴표로 묶어야합니다. globbing 표기법 ('* .txt' 등)은 따옴표로 묶을 수 없지만 참조 할 변수'$ file'가있을 때마다 참조가 큰 따옴표로 묶여 있는지 확인하십시오 :'cat "$ file" '등. –