나는 두 개의 큰 텍스트 파일을 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 열이며 첫 번째 열은 템플릿 이름이므로 기본적으로 파일의 각 템플릿에 해당하는 줄을 추출하고 싶습니다.
답변
이 -f
옵션은 grep이 패턴을 읽는 파일을 지정합니다. -e
쉘에서 호출 할 때 쉘에서 특수 문자가 확장되지 않도록 패턴을 인용해야 할 수 있다는 점을 제외하고 명령 행에서 패턴을 전달하는 것과 같습니다 ( 하나 이상이있는 경우 옵션 사용).
인수 -E
or -F
또는 -P
(있는 경우)는 grep에게 패턴이 작성된 구문을 알려줍니다. 인수없이 grep은 기본 정규 표현식을 기대 합니다 . 와 함께 -E
grep은 확장 된 정규 표현식을 기대 합니다 . 와 -P
(지원되는 경우), GREP 기대 펄 정규 표현식 ; 와 함께 -F
grep은 리터럴 문자열을 기대합니다. 패턴이 명령 행에서 오는지 또는 파일에서 오는지는 중요하지 않습니다.
문자열은 하위 문자열입니다. a+b
패턴으로 전달하면 포함하는 행 a+b+c
이 일치합니다. 제공된 문자열 중 하나만 포함하고 더 이상 포함하지 않는 행을 검색하려면 -x
옵션 을 전달하십시오 .
답변
@gilles의 좋은 대답으로 해결되지 않은 동일한 오류가 발생했습니다. 입력 파일을 자세히 살펴보면 끝에 2 줄 바꿈이 발견되었습니다. 이것 없이는 성공 만 필요합니다 : grep -i file_pattern_input file
(GNU grep 3.1, 입력 파일 5000 개 이상의 레코드, 일치 / 패턴 파일 2536, 2536이 모두 파일에 있어야한다는 것을 알았습니다. 개행은 파일의 모든 행을 가져 왔으며 2536 개의 일치하는 행은 없었습니다)