기본적인 찾기/바꾸기를 수행하는 작은 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 (
및)