패턴 일치를 위한 grep

패턴 일치를 위한 grep

스크립트 파일에서 다른 파일로 패턴을 읽는 데 문제가 있습니다. 기본적으로 한 파일의 출력은 다른 스크립트 파일의 입력으로 사용되어야 합니다. maze_gen의 출력은 # 및 공백 기호의 배열입니다. 예제 5 아래 7은 출력의 높이와 너비를 나타냅니다.

if [`./maze_gen 5 7 | grep -E "[^# ]"` ]; then
        echo no
else 
        echo yes
fi

maze_gen일련의 공백을 생성하는 파일 입니다 # . 이는 현재 작업 중인 입력 파일로 수신됩니다. 내 코드에 문제가 있습니다. 입력에 # 문자만 있는지 확인할 수 없습니다.

답변1

테스트하려는 출력에 ./maze_gen 5 7공백과 해시 이외의 문자가 포함된 것 같습니다.

다음을 사용하면 이 작업을 보다 효율적으로 수행할 수 있습니다.

if ./maze_gen 5 7 | grep -q '[^ #]'
then
    echo no
else
    echo yes
fi

실제로는 그렇지 않습니다.정제표현식과 일치하는 줄입니다. 대신 grep -q패턴이 일치하는 즉시 종료되고 grep종료 상태는 명령문에서 사용할 if분기( echo no또는 echo yes)를 결정하는 데 사용됩니다.

패턴이 일치하면 유틸리티가 입력 처리를 중지하고 셸이 문자열 비교 테스트에 사용하기 grep위해 출력을 저장할 필요가 없기 때문에 이는 사용자가 시도하는 것보다 더 효율적입니다 .grep

코드에 구문 오류가 있으므로 코드가 실행되지 않습니다. [주변에 공간이 필요합니다.

또한 -E일부 구현은 확장 정규식을 활성화하는 데 사용될 수 있습니다 grep. 귀하의 경우 표현식은 기본 정규 표현식이므로 이 작업을 수행할 필요가 없습니다.

관련 정보