find -exec sed 재사용 가능한 문자열로 찾기/바꾸기

find -exec sed 재사용 가능한 문자열로 찾기/바꾸기

기본적인 찾기/바꾸기를 수행하는 작은 sh 스크립트를 작성하려고 하는데 한 가지 작은 변형이 포함되어 있는데 잘못된 방식으로 수행하고 있는지 궁금합니다.

여기있어오래된 문자열

mysql_fetch_array($foo)

이게 뭐야?나는해야한다

$foo->fetch_array()

이제 쉬운 부분은 다음과 같습니다.

find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(/->fetch_array(/g' {} +

$foo그런데 괄호에서 꺼내서 앞쪽으로 밀어넣는 방법을 모르겠어요 ... sed같은 정규식에서 이 작업을 수행합니까... 변수에 저장하고 다시 빌드합니까? 이 문제를 해결하는 가장 효율적인 방법은 무엇입니까?

여러가지 시도를 해봤지만 헤어나올 수가 없네요 $ㅋㅋㅋㅋㅋ 정신이 완전 지쳐버렸네요!

편집하다

내가 필요하다는 점에 유의해야합니다.성냥 mysql_fetch_array특히 - OP에 명시하지 않아서 죄송합니다.

답변1

find . -type f -name "*.php" -exec sed -i -e 's/^.*mysql_fetch_array(\$\([^)]*\))/$\1->fetch_array()/' {} \;

답변2

이것을 사용하십시오 :

find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(\$foo)/\$foo->fetch_array\(\)/g' {} +

\문자를 이스케이프 하는 데 사용되며 $교체에 사용되는 새 값에서도 이스케이프되어야 합니다 parenthesis.

따라서 \for ()

관련 정보