![find를 사용할 때 sed에서 이스케이프 중괄호 사용](https://linux55.com/image/208471/find%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EB%95%8C%20sed%EC%97%90%EC%84%9C%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%20%EC%A4%91%EA%B4%84%ED%98%B8%20%EC%82%AC%EC%9A%A9.png)
질문이 있습니다 find
.
find -name '*.cpp' -exec sed -i 's|foo{}|bar{}|g' \{\} \;
찾기는 모든 항목을 잘못된 파일 이름으로 바꿉니다. 이와 같은 sed 표현식에서 "{}"를 이스케이프 처리하려고 하면
find -name '*.cpp' -exec sed -i 's|foo\{\}|bar\{\}|g' \{\} \;
에서 구문 오류가 발생합니다 sed
.
답변1
매개변수를 대체하지 않는 방법은 없습니다 find
. 대신, 더 이상 정확하게 가 되지 않도록 표현식을 수정하십시오. 예를 들어 다음과 같이 탈출할 수 있습니다.{}
-exec
{}
sed
{}
}
find . -name '*.cpp' -exec sed -i 's/foo{\}/bar{\}/g' {} +
이렇게 하면 매개변수를 find
대체 하지 않아도 됩니다.{}
sed
{}
이스케이프 as의 문제점은 \{\}
유효하지 않은 정규 표현식이라는 것입니다. 일반적으로 사람들은 다음과 같은 표현에서 \{
and를 사용합니다.\}
A\{0,1\}
연장하다정규식 A{0,1}
또는 A?
. 확장 정규식 지원을 활성화하기 위해 with도 사용하는 경우 \{\}
.sed
-E
sed
발견된 파일을 최대한 한 번에 호출하기 find
위해 명령에서 호출을 약간 변경했습니다 .find
sed