find를 사용할 때 sed에서 이스케이프 중괄호 사용

find를 사용할 때 sed에서 이스케이프 중괄호 사용

질문이 있습니다 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위해 명령에서 호출을 약간 변경했습니다 .findsed

관련 정보