2014-01-27 3 views
0

몇 가지 명령을 시도하고 몇 개의 자습서를 읽었지만 아무도 도움이되지 않았습니다. gnu sed 4.2.2를 사용하고 있습니다. 난 그냥에 대한 파일에 검색 할 :sed를 사용하여 파일의 내용을 검색하는 방법

func1(int a) 
{ 

는 다음에 줄 바꿈의 사실이다 경우 나도 몰라 "{"하지만 그냥 작동하지 않습니다. 정확한 명령이 도움이 될 것이며 설명이 훨씬 더 많을 것입니다. 감사!

참고 : "int a)"뒤에 입력 한 내용이 입력되었지만 stackoverflow가 개행을 추가하지 않는다고 생각합니다. 나는 혼란을 원하지 않는다. func1 (int a) 'newline'{을 검색하고 싶다.

+0

그냥 문자열을 찾으려고하거나 바꾸시겠습니까? 그것이 단지 찾아내는 경우에, 나는 http://en.wikipedia.org/wiki/Grep에보기를 가지고 갈 것을 건의 할 것입니다. – Martin

+0

안녕 마틴, 정말로 나는 단지 발견하려고 노력하고있다. 그러나 grep이 개행 문자 뒤에 "{"를 어떻게 도울 수 있는지는 알 수 없습니다. 내가 정말로 알아낼 수 없기 때문에 당신이 명령 줄의 예를 들려 줄 수 있다면 나는 즐거워 할 것이다. – user3241815

+0

여기를보십시오 : http://stackoverflow.com/questions/3717772/regex-grep-for-multi-line-search-needed – Martin

답변

3

sed -n '/func1/{N;/func1(int a)\n{/p}'

는 설명 : 예를 들어 것 그렙으로

sed -n '/func1/{       # look for a line with "func1" 
       N      # append the next line 
       /func1(int a)\n{/p  # try to match the whole pattern "func1(int a)\n{" 
             # and print if matched 
       }'       

:

grep -Pzo 'func1\(int a\)\n{' 

하지만 -z 덕분에 grep에 입력이 하나의 큰 "라인"입니다 것을 알 수 개행 문자도 포함됩니다 (즉, 입력에 널 문자가 포함되어 있지 않은 경우). 이 경우 Perl 정규식 (-P)이므로 괄호를 이스케이프 처리해야합니다. -o은 grep이 일치 패턴 만 인쇄하도록합니다.

+0

+1 그리고 sed -n '/ func1/{N;/func1 ([^)] *) \ s * \ n \ s * {/ p}'파일 – BMW

관련 문제