검색에서 검색

검색에서 검색

나는 grep명령줄 검색을 사용하는 데 익숙하며 다른 검색 결과를 사용하여 성공적으로 검색하는 방법을 알고 싶습니다.

내 시도는 다음과 같습니다. 결과에서 "도구"를 찾고 있습니다.

grep tool | grep -rl embed=

그러면 일부 결과가 반환되고 콘솔이 중단됩니다. 간단하고 우아한 솔루션이 있습니까?

답변1

관로왼쪽에서 오른쪽으로 달리세요. 더 정확하게,프로세스병렬로 실행되지만데이터왼쪽에서 오른쪽으로 흐름: 왼쪽 명령의 출력이 오른쪽 명령의 입력이 됩니다.

여기 왼쪽의 명령은 입니다 grep tool. 단일 인수를 에 전달하므로 grep표준 입력을 검색합니다. 표준 입력을 리디렉션하지 않았으므로 grep터미널에서 읽고 있습니다. 터미널은 사용자가 입력하기를 기다리고 있습니다.

파일 내에서 검색하려면 다음을 사용하십시오.

grep tool path/to/file | …

디렉토리에서 재귀적으로 검색하려면 다음을 사용하십시오.

grep -r tool path/to/directory | …

결과를 필터링하여 포함된 행만 나열할 수 있습니다 embed=. 제거 -l-r옵션은 입력이 표준 입력에서 오는 경우 의미가 없습니다.

grep -r tool path/to/directory | grep 'embed='

tool그러면 및를 포함하는 행이 embed=순서에 관계없이 나열됩니다. 또 다른 간단한 파이프라인 방법은 OR 패턴을 사용하여 단일 검색을 수행하는 것입니다. 이는 항상 가능하지만 패턴이 겹칠 수 있으면 패턴이 매우 복잡해질 수 있습니다(여기에서는 그렇지 않음).

grep -E -r 'tool.*embed=|embed=.*tool' path/to/directory

나열하고 싶다면문서포함 tool하고 embed=다른 명령 구조가 필요합니다. 첫 번째 명령 grep은 파일 이름( -l)을 나열하고 두 번째 명령은 이러한 파일 이름을 다음과 같이 받습니다.논쟁, 입력으로 사용되지 않습니다. 표준 입력을 명령줄 인수로 변환xargs명령은 다음과 같습니다.

grep -lZ -r tool path/to/directory | xargs -0 grep -l 'embed='

답변2

foo이 명령은 filename다음에 대한 파일 및 결과를 검색 합니다 bar.

grep foo filename | grep bar

또 다른 옵션은 awk를 사용하는 것입니다. awk '/foo/ && /bar/' filename

답변3

grep을 다양한 방법으로 사용할 수 있습니다. 예를 들면 다음과 같습니다.

cat myfile | grep keyword

위의 예에서는 파일을 에 덤프합니다 stdout. 파이프 문자는 |해당 출력을 가져와서 grep keyword명령 에 제공합니다 stdin. 마지막으로 myfile에 포함된 행이 일반적으로 터미널 화면에 keyword기록됩니다 . stdout이는 매우 비효율적인 리소스 사용입니다. 다음 명령을 사용하면 동일한 결과를 얻을 수 있습니다.

grep keyword myfile

grep캐스케이드로 사용 하려면 다음을 수행하십시오.

grep keyword1 myfile | grep keyword2

grep이번에는 첫 번째 명령이 myfile에 포함된 행을 찾습니다 . keyword1두 번째 grep 명령은 첫 번째 명령의 출력을 가져와서 keyword2그 안에서 검색합니다. 실제로 keyword1및 가 모두 포함된 keyword2행을 찾고 있습니다 myfile.

여러 파이프를 사용하여 이러한 명령을 다양한 명령줄 스위치와 곱하여 원하는 것을 찾을 수 있습니다. 원래 질문의 명령으로 수행하려는 작업을 일반 영어로 자세히 설명할 수 있다면 나 또는 다른 사람이 더 많은 도움을 줄 수 있습니다.

답변4

본질적으로 당신이 원하는 것은 논리적 AND입니다. grep줄 일치 도구이므로 패턴1과 패턴2 줄은 논리적으로 파일을 검색할 때 같은 줄에 하나의 용어와 다른 용어가 포함된 줄을 찾으려는 경우 정규식을 사용할 수 있습니다.grep 'pattern1.*pattern2' input_file.txt

$ ps -ef | grep 'xieerqi.*firefox'
xieerqi   5069  2616  7 17:43 ?        00:07:25 /usr/lib/firefox/firefox
xieerqi  24317  6901  0 19:22 pts/19   00:00:00 grep xieerqi.*firefox

이 예에서는 내 사용자 이름을 사용하여 모든 프로세스를 검색한 다음 다른 grep필터링 firefox프로세스로 연결하는 대신입니다.

자세한 내용은 여기를 참조하세요.지도 시간

관련 정보