파일에서 grep 패턴 읽기

파일에서 grep 패턴 읽기

여러 개의 큰 텍스트 파일이 있고 파일에는 UNIQS.txt다른 파일의 문자열 목록이 있습니다. grep내가 사용하는 코드는

grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam

아무것도 하지 않습니다. 결과 파일은 비어 있습니다. 하지만 내가 할 때

grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam

잘 작동합니다. grep파일의 항목이 UNIQS.txt(파일에 없는) 따옴표와 슬래시 없이 정규식 패턴으로 해석될 것이라고 생각하지 않기 때문에 이것이 나를 혼란스럽게 합니다. 일반적으로 파일에서 패턴을 얻으면 자동으로 정규식 패턴이라고 생각합니까?

편집하다:파일 에는 UNIQS.txt다음 형식의 개행으로 구분된 문자열이 있습니다.

HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783

(템플릿 이름이라고 함)과 파일 EEP_VSL...탭으로 구분된 열이 14개 정도 있는데 첫 번째 열이 템플릿 이름이므로 기본적으로 파일에서 각 템플릿에 해당하는 행을 추출하고자 합니다.

답변1

-f옵션은 grep이 패턴을 읽는 파일을 지정합니다. 이는 명령줄에서 패턴을 전달하는 것과 비슷합니다( -e또는 여러 패턴이 있는 경우 옵션을 사용하는 것). 단, 셸에서 호출할 때 셸에서 확장되는 특수 문자를 보호하기 위해 패턴을 인용해야 할 수도 있습니다.

인수 -E또는 -F( -P있는 경우)는 패턴이 작성된 구문을 grep에게 알려줍니다. 인수가 없으면 grep이 예상합니다.기본 정규식;with -E, grep 기대확장 정규식; -P(지원되는 경우), grep이 예상합니다.펄 정규식;의 경우 -Fgrep은 리터럴 문자열을 기대합니다. 패턴이 명령줄에서 나오는지 아니면 파일에서 나오는지는 중요하지 않습니다.

문자열은 하위 문자열입니다. a+b이를 패턴으로 전달 하면 a+b+c포함된 줄이 일치됩니다. 제공된 문자열 중 하나만 포함하고 더 이상 포함하지 않는 행을 검색하려면 이 -x옵션을 전달하십시오.

답변2

나는 같은 오류가 있었지만 @gilles의 훌륭한 답변으로 해결하지 못했습니다. 입력 파일을 자세히 살펴보면 끝에 2개의 줄 바꿈이 있는 것을 볼 수 있습니다. 이것이 없으면 성공하려면 다음과 같이 하십시오: grep -i file_pattern_input file

(GNU grep 3.1, 5000개 이상의 레코드가 있는 입력 파일, 일치하는 /pattern 파일 2536, 모든 2536이 파일에 있어야 한다는 것을 알고 있습니다. 개행을 사용하면 파일의 모든 줄과 일치하는 2536개의 줄만 얻습니다)

관련 정보