grep 명령어 질문

kokori0116의 이미지

특정 필드에 red 라는 값이 있는 라인만 찾으려면 어떻게 해야 하나요?

예를 들어(a.txt)

a yellow yellow yellow
b red red yellow
c red blue red
d blue red white
e black black red

두번째 필드의 값이 "red" 인 라인만 출력을 하고 싶습니다.(구분자는 탭입니다.)

# grep "red" a.txt
이렇게 하게 되면 다른 필드에 red 값이 있는 라인도 출력이 되서....

익명 사용자의 이미지

굳이 grep만을 써야하는것이 아니면
awk 로 간단히 해결할 수 있습니다.

cat a.txt | awk '$2 == "red" { print }'

좀 더 정확하게 체크를 해보시고 싶으면

'''
해당 라인의 필드 갯수가 반드시 4개이며 ( 또는 최소한 4개이며 )
첫번째 필드는 하나의 alphabet character로 되어있는 라인의
두번째 필드가 "red"인 라인을 출력
'''

으로 정규식 표현으로 하셔도 되고
아니면, 그냥 awk 로 if 노가다로 할수도 있습니다.

생각해보니
egrep으로 정규식 잘 써서도 할수있겠군요.

Prentice의 이미지

^[a-e]\tred\t
간단하게는 이런 식으로도 되겠네요.

세번째라면 이런 식으로.
^[^\t]*\t[^\t]*\tred\t

그루핑 + 반복 횟수 쓰셔서 이런 식으로도 가능할지도요.
^([^\t]*\t){2}red\t

시험해보지는 않았습니다. 백슬래시를 좀 넣어주셔야 할 듯요.