2014-09-16 2 views
0

나는 보이는 단어의 집합이 같은 :
fruits.txtGreping 일치/문자열

APPLE,2 
apple,3 
APPLE-ORANGE,3 
APPLEORANGE-GRAPE,5 

와 "사과"만 인쇄하려고합니다. 이것이 2
사과, 3
APPLE-ORANGE, 3 ##,
grep -iE "apple\b" fruits.txt
APPLE : 여기

내가 무엇을 시도했다이며, 다음과 같이 거의 비슷한 문제를 가진 모든 명령은 동일한 출력을 반환 무시하고 싶은 추가 줄

나는 또한 다음을 시도했지만 아무것도 반환하지 않았습니다.
grep -i '^apple$' fruits.txt

예상 출력
APPLE, 2 개
사과, 3

PS : 나는 "greping의 경우 루프에서 이것을 사용할 수 없습니다 grep -iE 'apple\b' fruits.txt | grep -v "-"에 제안하지 마십시오 사과 - 오렌지 "다시 한번 문제가 될 것입니다.

+1

을, ' – vks

+0

'grep -w'와 함께 이것을 구현할 계획이 있습니다; 마지막 옵션으로'사과 '를했습니다. –

+0

grep과 관련된 솔루션을 찾고 계십니까? 그렇지 않다면 배시 매개 변수 확장을 사용할 수 있습니다 .. – Ram

답변

2

시도 : 모두 정규 표현식에이 사건을 검색

APPLE,2 
apple,3 
APPLE-ORANGE,3 
APPLEORANGE-GRAPE,5 
applE , 8 
AAple900 

에서

grep -i 'apple[ ,]' fruits.txt 
grep -iP 'apple\b(?=[\s,])' fruits.txt 

모두 인쇄

APPLE,2 
apple,3 
applE , 8 

은 영향을받지 사과는 적어도 하나의 (공간) 또는 다음 ,.

방금 ​​문자 그룹을 제거 (공간)을 채택하지 않으려면 ...

또는 당신처럼 apple을 수행 할 수 없습니다 것을 grep에 말을해야 :

grep -iP 'apple[^\w-]' fruits.txt 
grep -iE 'apple[^[:alnum:]-]' fruits.txt 

apple에 대한 검색 단어 문자 또는 -이 뒤에 오지 않습니다.

+0

멋지다! 설명으로 정답을 정정하십시오. 새로운 것을 배웠습니다 :) Thanks mate! –

2

이 작업을 위해 awk을 사용할 수

$ awk -F, -v IGNORECASE=1 '$1 ~ /^apple$/' fruits.txt 
APPLE,2 
apple,3 

당신이 사용하는 awk에게 쉘 변수를 전달하려는 경우, 당신이 할 수있는 우리가`사과 grep을 왜 캔트

$ fruit=apple 
$ awk -F, -v IGNORECASE=1 -v FRUIT="^$fruit\$" '$1 ~ FRUIT' fruits.txt 
APPLE,2 
apple,3 
+1

멋진! 잘 작동한다 !나는 빠른 질문이있다. 루프에서 어떻게 사용할 수 있을까요?'apple' 대신'$ fruit'와 같은 변수를 어떻게 사용할 수 있습니까? 나는'awk -F -v FRUIT = $ fruit, IGNORECASE = 1 '$ 1 ~/^ FRUIT $ /'fruits.txt'를 시도했다. 그러나 운이 없다. –

+1

@ManivG 도와 주셔서 감사합니다. 'awk'는'/.../ '안에있는 텍스트를 정규 표현식의 일부로 취급하기 때문에 명명 된 변수를 확장 할 수 없습니다. 이 문제를 해결하기 위해 변수 정의에 정규식 특수 문자를 넣고'/.../ '를 생략 할 수 있습니다. 최근 편집에서 추가 된 솔루션을 참조하십시오. –