이런 종류의 명령을 더 쉽게 실행하고 싶습니다.
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" {} \; ; }