bash 함수에서 `find -exec`를 실행하는 방법 --- 이스케이프 문자 문제 및 예기치 않은 파일 끝

bash 함수에서 `find -exec`를 실행하는 방법 --- 이스케이프 문자 문제 및 예기치 않은 파일 끝

이런 종류의 명령을 더 쉽게 실행하고 싶습니다.

find . -type f -exec sed -i 's|wpp-splash|wpp_splash|g' {} \;

그래서 이를 단축하기 위해 내 함수를 만들었습니다 .bashrc.

function sedall() { find . -type f -exec sed -i 's|$1|g' {} \; }

그래서 나는 그것을 할 수 있다

sedall wpp-splash|wpp_splash

하지만 구문 오류가 있습니다. 그것이 무엇인지는 잘 모르겠지만 bash 기능으로 인해 "예기치 않은 파일 끝"이 발생합니다. 이것이 }캐릭터와 관련이 있는지 궁금합니다 . 나는 그들에게서 도망치려 했지만 \{\}문제는 해결되지 않았습니다.

도움이 필요하세요?

답변1

거기에는 많은 문제가 있습니다.

  • 변수는 작은따옴표 내에서 확장되지 않습니다.
  • { command ; }종료 세미콜론(또는 개행 문자)이 필요합니다.
  • sedall wpp-splash|wpp_splash파이프 문자를 따옴표로 보호하지 않았기 때문에 이는 파이프로 이해됩니다.

나는 이것을 제안한다:

sedall(){
    [ "$#" = 2 ] || { echo Two arguments needed; return 9; }
    find . -type f -exec sed -i "s|$1|$2|g" {} \;
}

하나가 아닌 두 개의 인수를 취하고 실행하기 전에 두 인수가 모두 제공되는지 확인합니다.

$ cat a b
XABCX
YABCY
$ sedall ABC DEF
$ cat a b
XDEFX
YDEFY

답변2

function sedall() { find . -type f -exec sed -i "s|$1|g" {} \; ; }

관련 정보