2016-06-18 1 views
0

줄 집합을 찾고 구분 기호를 사용하여 다른 집합으로 바꿀 수있는 sed 함수를 찾고 있습니다.중괄호로 구분 된 여러 줄의 내용을 대체하는 Sed

출처 :

class Requests 
{ 
    function approveRequests($users){ 
    foreach($users as $user){ 
     if(hasQualified($user)){ 
     acceptUser($user); 
     }else{ 
     rejectUser($user) 
     } 
    } 
} 

}

사람 :

class Requests 
{ 
    function approveRequests($users){ 
    autoAcceptMember($users); 
    } 
} 

하여 소스가 다른 여러 세트를 가질 수 있습니다 중괄호는 같지만 일치 할 것입니다. 그래서 그것은 3 개의 입구가 있고, 그 다음에 3 개의 폐쇄가있을 것이고, 그래서 나는 모든 것을 사이에 넣고 싶습니다.

+0

접두사 코드를 정규식, 대신에

sed -e '/foreach/,$ d' will give the following, in context: > cat inputFile.txt | sed -n '/^class Requests/,/^}/ p' | sed -e '/foreach/,$ d' class Requests { function approveRequests($users){ 

나오지 사용과 일치 사이의 라인을 삭제하고 추가 공백 – Cyrus

답변

0

sed은 단 한줄로만 작동합니다.

(좋아요, 여러 줄에서 작동 할 수 있지만 동일하게 보이는 }을 구분할 수 없음)

예 : awk 또는 다른 고급 언어 (파이썬, 펄 등)

0

이것은 아마 sed로 파일을 편집하는 방법에 대한 아이디어를 줄 것입니다.

cat inputFile.txt | sed -n '/^class Requests/,/^}/ p' | sed -e '/foreach/,$ d' | sed -e 's/\(function.*\)/\1\n autoAcceptMember($users);\n }\n}\n/' 

출력 :

class Requests 
{ 
    function approveRequests($users){ 
    autoAcceptMember($users); 
    } 
} 

inputFile.txt :

class here 
{ 
    are 
    some extra lines 
} 

class Requests 
{ 
    function approveRequests($users){ 
    foreach($users as $user){ 
     if(hasQualified($user)){ 
     acceptUser($user); 
     }else{ 
     rejectUser($user) 
     } 
    } 
} 

} 

class here2 { 
    function are() { 
     some extra lines 
     also 
} 

가 사용 나오지도 및 정규식과 일치하고 인쇄 라인

사이3210
> cat inputFile.txt | sed -n '/^class Requests/,/^}/ p' 
class Requests 
{ 
    function approveRequests($users){ 
    foreach($users as $user){ 
     if(hasQualified($user)){ 
     acceptUser($user); 
     }else{ 
     rejectUser($user) 
     } 
    } 
} 

} 

사용은 나오지 및 정규식 일치와 네 개의 태그와 함께 경기를

sed -e 's/\(function.*\)/\1\n autoAcceptMember($users);\n }\n}\n/' will give the following, in context: 
> cat inputFile.txt | sed -n '/^class Requests/,/^}/ p' | sed -e '/foreach/,$ d' | sed -e 's/\(function.*\)/\1\n autoAcceptMember($users);\n }\n}\n/' 
class Requests 
{ 
    function approveRequests($users){ 
    autoAcceptMember($users); 
    } 
} 
관련 문제