bash 기능에서 "찾기"를 수행하기 위해 "sed"를 사용하는 방법

bash 기능에서 "찾기"를 수행하기 위해 "sed"를 사용하는 방법

디렉토리를 재귀적으로 검색하고 교체하여 한 문자열을 다른 문자열로 변경하는 간단한 bash 함수를 작성하려고 합니다. 이것이 내가 얻는 것입니다:

function sar () {
    from="$1"
    shift
    to="$1"
    shift

    if [[ $from == '' || $to == '' ]]
    then
        echo Usage: sar \<from\> \<to\> \<filename\>
        return
    fi

    while [[ $# -gt 0 ]]
    do
      filename="$1"
      shift
      find ./$filename -type f -exec sed -i -e 's/$from/$to/g' {} \;
    done
}

예를 들어:

$ sar xxxx yyyy mydir

./mydir에서 실행 find하고 액세스하는 모든 파일에서 xxxx를 yyyy로 바꿔야 합니다. 명령은 오류 없이 실행되지만 대체를 수행하지는 않습니다.

와 함께 set -x실행

+ find ./mydir -type f -exec sed -i -e 's/$from/$to/g' '{}' ';'

$from해결 되지 $to않았으며 몇 가지 추가 참조가 나타났습니다.

bash 함수에서 이 명령을 작성하는 올바른 방법은 무엇입니까(bash 스크립트와 동일한 구문 규칙을 따른다고 가정합니다)?

답변1

작은따옴표 안에 변수를 넣으면 확장되지 않으므로 큰따옴표를 사용해야 합니다.

... sed -i -e "s/$from/$to/g" ...

관련 정보