페도라와 우분투에서 다르게 행동하는 grep


13

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'

무슨 일이 벌어 질지 알아? 두 시스템에서 동일하게 작동하는 것을 어떻게 만들 수 있습니까?


어때요 ls *-ref.alleles?
glenn jackman

@glennjackman, 나는 그것을 생각했지만 누군가가 정확히 그것을하고 내가 고치려고하는 bash 스크립트에서 그 줄을 주석 처리했습니다 :-) 나는 그들이 이유가 있다고 가정 할 수 있습니다 ...
Greg_the_Ant

답변:


30
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의 잘못된쪽에 있음을 확신합니다


정답은 행동이 변경된 버전까지 연구 해 주셔서 감사합니다.
richardneish

2
와우 감사합니다. 맞습니다, grep 2.6.3 vs grep 2.14가 있습니다.
Greg_the_Ant

6

주요한 -문제입니다. 동일한 결과를 얻으려면 다음을 추가하십시오 --.

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.

1
우분투와 페도라에서 왜 다른가요? 둘 다 동일한 부정적인 결과를 제공해서는 안됩니까?
Glueon

감사. 이 명령을 다른 명령으로 파이프하는 경우 문제가 발생합니까? 아니면 명령이 표시되는 위치에만 적용됩니까?
Greg_the_Ant

4
bash 맨 페이지는 실제로 관련이 없습니다. --grep의 이해와 독립적 인 bash 자체 명령 줄에서의 처리에 대해 설명합니다 --. 일반적인 규칙이기 때문에 같은 방식으로 작동하지만 일반적으로 쉘의 매뉴얼 페이지는 다른 프로그램에 대한 인수의 의미에 대해 아무 것도 알려주지 않습니다.

1

grep 명령에 동작을 대체하는 별명이 있으면 .bashrc를 확인하십시오. 아마도 문제 일 것입니다. "-F"매개 변수없이 grep을 시도하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.