전체 줄과 일치하는 파일을 검색하는 방법은 무엇입니까?


1

나는 stdout각각 새로운 줄에 일련의 숫자 를 보내는 명령을 가지고 있습니다 . 목록에 특정 번호가 있는지 확인해야합니다. 일치는 서브 세트가 아니라 정확해야합니다. 예를 들어, 작동하지 않는 간단한 방법은 다음과 같습니다.

/run/command/outputing/numbers | grep -c <numberToSearch>

내 버전은 '456'을 검색 할 때 다음 목록에서 오 탐지를 나타냅니다.

1234567
98765
23
1771

카운트가 0이 아닌 경우, 일치하는 것이 발견되거나 0이면 그 수는 목록에 없습니다.

이것의 문제는 numberToSearch가 한 줄의 숫자 하위 시퀀스와 일치 할 수 있다는 것입니다. 대신 전체 줄에서만 조회를 원합니다. 나는 grep 매뉴얼 페이지를 보았고 전체 줄에만 일치하는 방법을 보지 못했습니다. 이 작업을 수행 할 수있는 방법이 있습니까, awk아니면 sed또는 다른 도구를 사용하는 것이 더 나을까요? 검색중인 숫자가 있는지 여부에 대한 이진 답변이 필요합니다.


답변:


1

Ansgar의 답변에 추가하는 대신 ( -l소문자 L)를 고려하십시오 -c. 그것은 -l당신에게 예 또는 아니오 대답을 줄 것입니다.

/run/command/outputting/numbers | grep –l '^456$'

(standard input)일치하는 줄을 찾으면 “ ” 를 출력 하고 상태 0으로 종료합니다. 텍스트를 찾을 수 없으면 아무것도 출력하지 않고 상태 1로 종료됩니다. 일부 버전의 버전은 (자동) 옵션을 grep지원하여 -q모든 출력을 억제하고 종료 상태 만 제공합니다.

검색 문자열을 처음 만나면 종료 할 수 있다는 장점이 있으며 전체 입력을 읽을 필요가 없습니다. 완료하기 위해 명령을 실행해야하는 경우 이러한 옵션은 해로울 수 있습니다.


5

GNU grep 매뉴얼에서 :

`-x'
`--line-regexp'
     Select only those matches that exactly match the whole line.
     (`-x' is specified by POSIX.)

그래서:

/run/command/outputing/numbers | grep -x <numberToSearch>

당신에게 전체 라인 일치를 얻을 것입니다 :

/run/command/outputing/numbers | grep -cx <numberToSearch> 

당신은 전체 라인 경기의 수를 얻을 것이다.


2
num=23
/run/command/outputing/numbers | grep -c "^$num$"

23을 원하는 숫자로 바꿉니다.


William이 C 쉘을 사용하는 경우 다음과 같아야 "^$num"'$'합니다.
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.