2012-05-30 7 views
0

PHP 상수 대신 Bash 스크립트가 있습니다. define('xxxx',....);에 원하는 것을 입력하십시오. 에 의해SED 대체품 Mac OS 및 Ubuntu 문제를 해결하는 방법 문제

:

sudo sed -E -i "" "s/^(define).*(${2})[\'|\"].*/${3}/g" "$file" 

문제는 우분투가 내가 후 여분의 공간으로 인해 실패라는 것이다.

-i "" 

해당 공간을 제거하면 우분투에서 작동하지만 MacOS에서는 작동하지 않습니다. 오류가 발생했습니다.

sed: 1: "../config.php ...": invalid command code 

평화롭게 * nix에서이 명령을 수행하기위한 옵션은 무엇입니까?

시간과 지식에 미리 감사드립니다.

+0

빠른 응답을 보내 주셔서 감사합니다. – sakhunzai

답변

2
sudo perl -pi -e "s/^(define).*(${2})[\'|\"].*/${3}/g" "$file" 

실제로 나는 ['\"]을 의미한다고 생각합니다.

+0

내가 이것을 테스트 해 보자. 바로 그 것이다. – sakhunzai

0

OS X에 GNU sed를 설치하고 사용하십시오.

+0

번거 로움없이 해결책을 제안하십시오. 도메인에서 작동하는 몇 가지 다른 명령 등 덕분에 – sakhunzai

+0

솔루션의 부족이 없습니다. 각각 하나의 번거 로움입니다. –

1

sed의 -i 옵션은 GNU 방언의 일부입니다. 이것은 휴대용이 아닙니다.

sed ... ${file} > ${file}.tmp && mv ${file}.tmp ${file} 

또 다른 하나는 펄 대신에 나오지도, as suggested by triplee을 사용하는 것입니다

하나의 대안은 임시 중간 파일을 사용하는 것입니다.

+0

OS X'sed'는'-i'를 지원하지만, 백업 확장에 대해서는 약간 다른 방식이다. –

1

내부에서 작업을 수행하고 백업 파일 생성을 억제하거나 피하기 위해 운영 체제에서 조건부로 배열을 설정할 수 있습니다.

[[ $(uname -s) == 'Darwin' ]] && ioption=(-i "") || ioption=(-i) 
sed "${ioption[@]}" "s/^(define).*(${2})['\"].*/${3}/g" "$file" 

배열은 인용 된 인수와 여러 옵션/인수가 모두 사용되도록 사용됩니다. 추가 조건을 조건부로 만들고 싶다면 배열에 더 추가 할 수 있습니다.

파이프는 대괄호 표현식 안에 교대 문자가 아니며 대신 문자 그대로 포함되어 있습니다. 파이프와 잠재적으로 일치시키지 않으려면 파이프를 생략해야합니다. 바깥 쪽 큰 따옴표 안에서는 작은 따옴표를 이스케이프 할 필요가 없습니다.

+0

다른 방법처럼 보이는 @Dennis Williamson에게 감사드립니다. 그러나, 삼중 쌍의 해결책은 똑바로 보인다. – sakhunzai

관련 문제