2017-02-28 1 views
-2

grep을 사용하여 여러 패턴 (대소 문자를 구분하지 않음)이있는 행을 검색하는 bash 스크립트를 만들고 싶습니다. 나는 다음과 같이 내가 사용할 수있는 bash는 스크립트를 만들려면 :grep을 사용하여 여러 패턴을 검색하는 기능

myscript file.txt pattern1 pattern2 pattern3 

을 그리고 그것은에 traslated 얻을한다 : 나는 bash는 스크립트 다음 시도

grep -i --color=always pattern1 file.txt | grep -i pattern2 | grep -i pattern3 

,하지만 작동하지 않습니다 :

#!/bin/bash 
grep -i --color=always $2 $1 | grep -i $3 | grep -i $4 | grep -i $5 | grep -i $6 | grep -i $7 

오류 :

Usage: grep [OPTION]... PATTERN [FILE]... 
Try 'grep --help' for more information. 
Usage: grep [OPTION]... PATTERN [FILE]... 
Try 'grep --help' for more information. 
Usage: grep [OPTION]... PATTERN [FILE]... 
Try 'grep --help' for more information. 
Usage: grep [OPTION]... PATTERN [FILE]... 
Try 'grep --help' for more information. 
+0

를하지만 이것의 목표는 무엇 : 이 같은 스크립트에서이를 사용할 수 있습니까? –

+0

패턴이 정의되지 않았습니까? –

+0

예. bash 스크립트는 첫 x 째 파일 이름 인수와 가변 인수의 패턴 인수로 실행할 수 있어야합니다 (최소한 6 패턴 이상을 처리 할 수 ​​있어야합니다). – rnso

답변

1

나는 당신이 재귀 함수를 할 수 있다고 생각 : 스크립트에서

search() { 
    if [ $# -gt 0 ]; then 
     local pat=$1 
     shift 
     grep "$pat" | search "[email protected]" 
    else 
     cat 
    fi 
} 

는이 함수를 호출 인수로 검색 패턴을 통과한다. $1 파일 다음은

file=$1 
shift 
cat "$file" | search "[email protected]" 
+0

검색 기능은 bash 스크립트에서 어떻게 사용됩니까? – rnso

+0

@rnso 사용법을 보여주기 위해 편집했습니다. –

+0

인수가 없거나 하나만 입력하면 오류 메시지가 표시 될 수 있습니까? – rnso

-1

을 패턴을 할 것이라고하는 주장의 나머지 부분이라고 말할 당신이 누락됩니다 $ 3 등 그래서, 다음 몇 가지 grep 명령 것, 마지막에 하나 개의 인수 또는 기타를 생략하면 논쟁을 듣지 않고 울부 짖을 것이다.

1

당신이 GNU AWK, 당신은

awk 'BEGIN {IGNORECASE=1} /pattern1/ && /pattern2/ && /pattern3/' file.txt 

EDIT를 사용할 수있을 때 :

inputfile="$1" 
shift 
awk -f <(echo "BEGIN {IGNORECASE=1}"; printf " /%s/ &&" $* | sed 's/&&$//') "${inputfile}" 
+0

"awk 'BEGIN {IGNORECASE = 1}/$ 2/&&/$ 3/&&/$ 4 /'$ 1"은 bash 스크립트에서 작동하지 않습니다. 또한 2 패턴 만 보내면 어떻게됩니까? 내가 보낼 수있는 패턴의 변수 번호를 처리하고 싶습니다. – rnso

+0

다양한 답변을 담은 스크립트에서이 문제를 해결할 수있는 해답을 편집했습니다. –

관련 문제