2010-04-06 5 views
4

파일에서 string1 또는 string2 또는 string3 등의 출현을 검색하고 해당 행만 인쇄하려고합니다 (표준 출력 또는 파일 중 하나에 출력). 어떻게하면 bash에서 쉽게이 작업을 수행 할 수 있습니까? 또한파일에서 여러 문자열을 검색하는 방법

답변

7
grep "string1\|string2\|string3" file_to_search_in 
+0

감사합니다, Chen, 귀하의 신속한 답변. 물론, 그 작품 - 매끄러운! – topwoman

+0

아마도 그의 대답도 받아 들일 수 있습니다. – Anders

0

:

grep -e 'string1' -e 'string2' -e 'string3' 
+0

감사합니다, Randy, 매력처럼 일했습니다! 그리고 더 많은 것을 발견했습니다 : egrep 'string1 | string2'infile – topwoman

10

당신은 또한 필요한 경우 AWK

awk '/string1|string2|string3/' file 

AWK와 함께, 당신은 또한 쉽게 사용 및 로직 수 있습니다 사용할 수 있습니다. 펄

awk '/string1/ && /string2/ && /string3/' file 
1

:

배시 한 라이너
perl -lne 'print if /string1|string2|string3/;' file1 file2 *.fileext 

:

while read line; do if [[ $line =~ string1|string2 ]]; then echo $line; fi; done < file 

배시 스크립트 :

#!/bin/bash 

while read line 
do 
    if [[ $line =~ string1|string2|string3 ]]; then 
     echo $line 
    fi 
done < file 

참고 공간 주변 "[$ 라인 = ~ string1 | string2]] "는 모두 관련성이 있습니다. 즉, 이러한 배쉬 실패 :

[[ $line=~string1|string2 ]] # will be alway true... 
[[$line =~ string1|string2]] # syntax error 
+0

배쉬 하나의 라이너에서 중괄호를 생략 할 수 있습니다. do와 do는 당신을 위해 그것을합니다. –

+0

do elim_curly_braces; 끝난! – dawg

2

또 다른 선택, 검색 할 문자열의 수가 큰 특히, 줄 바꿈 및 사용에 의해 구분 된 파일에 그 문자열을 넣어하는 것입니다

grep -f file_of_strings file_to_search 
관련 문제