Fedora에서 이것을 실행하면 다음과 같이 보입니다.
$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles 2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
2R-ref.alleles
그러나 우분투 (동일한 데이터)를 실행할 때 grep에서 결과를 얻지 못합니다.
$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles 2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
무슨 일이 벌어 질지 알아? 두 시스템에서 동일하게 작동하는 것을 어떻게 만들 수 있습니까?
답변
grep -F '-ref.alleles'
다음과 같습니다.
grep -F -ref.alleles
아포스트로피 사이의 문자는 셸 메타 문자가 아니므로 인용해도 아무런 영향을 미치지 않습니다.
이것은 차례로 다음과 같습니다.
grep -F -r -e f.alleles
-
접두사 옵션 을 정상적으로 구문 분석하여 . -e
옵션은 인수를 걸리지 만 -F
하고 -r
하지.
grep 할 파일을 지정하지 않았으므로 기본 동작은 stdin에서 작동하는 것입니다. -r
옵션이 의미가 없으므로 기본적으로 검색 .
(현재 디렉토리)을 재귀 적 으로 검색 하고 stdin을 무시합니다. 일부 버전에서.
다음 --
과 -
같이 시작하는 정규 표현식 앞에 “더 이상 옵션 없음”표시기 를 사용해야합니다 .
grep -F -- -ref.alleles
-r
파일 인수가없는 동작이 변경된 지점을 추적했습니다 . 2012 년 3 월 2 일에 릴리스 된 버전 2.11에있었습니다 . 릴리스 발표를 참조하십시오.
동작에 영향을 미치는 자식 커밋은 이것 과 이것 입니다.
grep --version
두 컴퓨터에서 실행 하는 경우 두 컴퓨터 중 하나가 2.11의 잘못된쪽에 있음을 확신합니다
답변
주요한 -
문제입니다. 동일한 결과를 얻으려면 다음을 추가하십시오 --
.
grep -F -- '-ref.alleles'
보낸 사람 man bash
:
A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as filenames
and arguments.
답변
grep 명령에 동작을 대체하는 별명이 있으면 .bashrc를 확인하십시오. 아마도 문제 일 것입니다. “-F”매개 변수없이 grep을 시도하십시오.