반달가면 이글루에서 백업 - 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"
'bash script' 카테고리의 다른 글
[bash: expect] rsync 자동 원격 백업 (0) | 2023.05.03 |
---|---|
[bash: grep, awk] 특정 문자열을 제외한 나머지 출력하기 (0) | 2023.04.18 |
[bash: awk] 특정 위치(field)에 있는 문자열 바꾸기 (sub, gsub) (0) | 2023.04.18 |
[bash: find] 최근에 접근/변경된 파일 찾기 (1) | 2023.04.17 |
[bash: awk] 다중 문자열 검색 (0) | 2023.04.17 |