2010-01-30 1 views
41

"nmse_gain_constant"패턴을 포함하는 모든 줄 다음에 나오는 한 줄을 추출하려는 compare.txt라는 텍스트 파일이 있습니다. 다음 명령을 사용하면 나를 닫을 수 있습니다 :grep을 컨텍스트 라인과 함께 사용할 때 "-"행 분리 기호를 제거하는 방법은 무엇입니까?

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant 

그러나 원하는 텍스트의 모든 줄 사이에 구분 기호 "-"줄이 있습니다. 어떤 쉬운 아이디어라도 "-"줄을 제거하는 방법?

여기에 몇 가지 예제 텍스트를 제공 하겠지만 "-"문자는이 웹 게시물에 의해 제어 문자로 잘못 해석되며 잘못된 것으로 보입니다.

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-" 

답변

3

하나 개의 솔루션이 될 것입니다.

man grep 상태 :

-A NUM 

    Places a line containing a group separator (--) between 
    contiguous groups of matches. With the -o or --only-matching 
    option, this has no effect and a warning is given. 

하지만 결과 정리 간단한 SED를 사용할 수 있습니다

yourgrep | sed '/^--$/d' 
+0

잘 작동합니다. 감사! – Michael

16

글쎄, 기본적으로 A 스위치가 해당 문자를 추가합니다, 그래서 더 신비 없습니다 :

+0

위대한 작품입니다. 고맙습니다. grep -B 용 – Michael

6

이 파이프 필요가 이렇게 많은 greps 없거나을 위해 (다른 도구를 사용을 예 : sed) AWK를 사용하는 경우 :

awk '/nmse_gain_constant/{getline;print }' compare.txt 
+1

사용 : awk '/ regex/{print x; 인쇄}; {x = $ 0} ' –

+0

getline에 대한 설명 : awk 명령의 print 부분은 grep과 동등한 결과를 얻는 데 사용 된 awk 표현식에 익숙하지 않은 경우 grep을 시도하는 대부분의 사람들이이 대답에 적합합니다. – Steen

21

문서화되지 않은 grep 매개 변수가 있습니다. "--group-separa tor ", 기본값"- "을 무시합니다. 이중 대시를 제거하려면 ""로 설정할 수 있습니다. 그래도 여전히 빈 줄이 있습니다. 나는 똑같은 문제가 있었고 grep의 소스 코드를 읽음으로써이 param을 발견했다.

grep ... | grep -v -- "^--$" 

그러나이 너무 작동합니다

+9

--group-separator-separator를 사용한다. (아래 참조) –

+0

'--group-separator = ""'를 설정하더라도, 그룹 구분 기호는 실제로 비어 있지만 채색된다. 따라서 빈 줄 대신 구분선에 색상 코드, 즉 [[[36m [[K [[m'[K'. grep'--color = always'를 유지하면서 분리 기호의 색상을 비활성화하는 방법이 있습니까? –

+1

'grep (BSD grep) 2.5.1-FreeBSD'에 대한 옵션이 없습니다. – Tim

62

나는 이렇게!

grep --no-group-separator ... 

그리고 "-"또는 공백 행을 뱉어 내지 않습니다.

+9

'grep : 인식 할 수없는 옵션'--no-group-separator 'Mac OS X에서 – krookedking

+0

이것은 Linux, RHEL 6.8에서만 작동합니다. – cryptic0

관련 문제