bash script2023. 4. 18. 14:58

반달가면 이글루에서 백업 - http://bahndal.egloos.com/566153

 

grep 명령으로 두개 이상의 문자열이 포함된 행을 검색하되, 문자열이 나오는 순서를 지정해야 할 경우가 있다. 예를 들어 문자열 "abc"와 문자열 "xyz" 둘 다 있으면서 "abc" 문자열이 앞에 나오는 행을 찾고 싶은 경우다.

grep 명령에서 와일드카드(*)는 바로 앞에 있는 문자가 없거나 또는 1번 이상 나타나는 경우를 뜻하고, 점(.)은 임의의 문자를 나타내므로 ".*" 이런 형태의 인자를 이용하면 된다. "임의의 문자가 없거나 1번 이상 나타나는 경우"를 뜻하기 때문이다. 아래의 예시를 보자.

# abc 다음에 xyz 출현
cat my_file.txt | grep "abc.*xyz"

# xyz 다음에 abc 출현
cat my_file.txt | grep "xyz.*abc"

# abc 다음에 def 다음에 xyz
cat my_file.txt | grep "abc.*def.*xyz"

와일드카드 대신에 문자열 길이를 지정하는 방식도 이용할 수 있다. 좀 더 자세한 내용은 이전 게시물을 참고하자. 여기로

# abc 다음에 임의의 문자가 최소 0번 이상 출현한 후에 def 출현
cat my_file.txt | grep "abc.\{0,\}def"

순서와 무관하게 검색하는 경우는 파이프(|)로 grep 명령을 두개 연결하면 된다. 이전 게시물을 참고하자. 여기로

# 순서와 무관
cat my_file.txt | grep "abc" | grep "xyz"

728x90
Posted by 반달가면