Nice programing

컨텍스트 줄에 grep을 사용할 때“-”줄 구분 기호를 제거하려면 어떻게해야합니까?

nicepro 2020. 12. 28. 22:32
반응형

컨텍스트 줄에 grep을 사용할 때“-”줄 구분 기호를 제거하려면 어떻게해야합니까?


"nmse_gain_constant"패턴을 포함하는 모든 행을 따르는 단일 행을 추출하려는 compare.txt라는 텍스트 파일이 있습니다. 다음 명령은 나를 닫습니다.

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

그러나 여기에는 원하는 텍스트의 모든 줄 사이에 구분 기호 "-"줄이 포함됩니다. "-"줄을 제거하는 방법에 대한 쉬운 아이디어가 있습니까?

여기에 몇 가지 예제 텍스트를 제공하지만 "-"문자는이 웹 게시물에서 제어 문자로 잘못 해석되어 표시되는 내용이 올바르지 않습니다.


나는 이것을한다:

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

그러나 이것도 작동합니다!

grep --no-group-separator ...

그리고 그것은 "-"또는 심지어 빈 줄을 뱉지 않습니다.


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


글쎄, A기본적으로 스위치는 해당 문자를 추가하므로 미스터리가 아닙니다.

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'

AWK를 사용하는 경우 너무 많은 greps에 파이프하거나 다른 도구 (예 : sed)를 사용할 필요가 없습니다.

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

한 가지 해결책은 다음과 같습니다.

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

참조 URL : https://stackoverflow.com/questions/2168065/how-do-i-get-rid-of-line-separator-when-using-grep-with-context-lines

반응형