2014-04-24 3 views
0

split() 함수가 광범위하게 사용 된 PHP 파일이 있습니다. 나는 sed와 find 명령어를 사용하여 preg_split으로 바꿨다. 이제 문제는 preg_split은 분리 기호가 정규식 패턴을 필요로하지 않을 때 구분 기호로 묶어야한다는 것입니다.AWK를 사용하여 슬래시로 문자열 묶음

나는 SED를 사용하여 문자열을 구분 기호로 묶으려고했지만 SED는 내 지식에 따라 읽을 수 없습니다. 나는 AWK 칸이이 문제를 해결한다는 것을 알게되었다.

나는

preg_split('\r\n', $some_string); 

전진은 구분 기호로 작업을 슬래시
preg_split('/\r\n/', $some_string); 

으로 수정해야합니다. 어떻게 이것을 AWK를 사용하여 할 수 있습니까?

+0

둘 다 언급하지 못한 점은'sed '가 구분 기호로'/'를 사용할 필요가 없다는 것입니다. triplee의 응답에서 콜론':'이 구분 기호로 사용됩니다. damgad의 답변에서 그것은 구분자 인'# '입니다. 이렇게하면 sed로 패턴과 대체 모두에서 슬래시를 쉽게 사용할 수 있습니다. –

+0

@Ashkan : 오타였습니다. 질문이 업데이트되었습니다. –

답변

1

sed이 완벽하게 가능합니다.

sed "s:\(preg_split('\)\(([^']*\)':\1/\2/':g" file.php 

sed 방언은 다른 백 슬래시 조합을 원할 수 있습니다. 또는 Perl (또는 PHP)을 사용하십시오.

perl -pi~ -e "s:(preg_split\(')([^']*)':$1/$2/':g" file.php 

는 (내부 편집에 대한 -i 플래그를 주목하라; 아마 당신 sed도 것을 지원?) 나는이 문제를 실제 sed 정규식보다는 인용과 함께 한 상상 해요

. 셸에서 작은 따옴표를 올바르게 인용하는 것은 어려운 일일 수 있습니다. (최악의 경우, 셸 스크립트를 파일에 넣어 셸에서 볼 수 없도록합니다.) 물론 슬래시 대신 다른 구분 기호를 사용하면 표현이 더 간단 해집니다. 예상대로 작동합니다

1

는 :

sed "s#preg_split('\(.*\)'#preg_split('/\1/'#g" 

는 @Stephen P는 코멘트에서 언급 한 바와 같이. sed와 함께 다른 구분 기호를 사용할 수 있습니다. 구분 기호가 정규식 또는 대체 문자열에 사용 된 경우 \을 사용하여 이스케이프 처리해야합니다. regex와 replacement 문자열에 존재하지 않는 구분 기호를 사용하는 것이 항상 더 간단합니다. 여기서는 #을 사용했습니다.

+0

같은 줄에 작은 따옴표로 묶은 다른 문자열이 있으면 욕심 많은 와일드 카드가 너무 많이 일치합니다. 사소한 수정은'. * '대신'[^'] *'를 사용하는 것입니다. – tripleee

+0

@tripleee PHP에서 허용되는 작은 따옴표로 묶인 문자열에'''를 사용하지 않습니까? 'preg_split ('\ r \ n \'sth ', $ some_string);에서'. *'는 corretly 일치하고'[^'] *'는 실패합니다. 틀 렸으면 고쳐줘. – damgad

+0

그것은/또는, 또는 훨씬 더 복잡한 정규 표현식입니다. – tripleee