adsense_in_article_test


[bash: if, grep] 특정 문자열의 존재유무에 따른 작업 지정하기 리눅스 bash script

어떤 파일에 특정한 문자열이 있는 경우와 없는 경우에 각기 다른 작업을 해야 할 경우, if 조건문과 grep을 적절히 조합해서 간편하게 구현할 수 있다.

우선 if 조건문의 -z 옵션을 보자. 이것은 문자열의 길이가 0이면 참, 0이 아니면 거짓이다. 아래의 예시를 보자.

string="abc"
# 변수 abc에 저장된 문자열의 길이가 0인 경우 메시지 출력
if [[ -z $string ]]
  then echo "변수 string에 저장된 문자열의 길이는 0입니다."
fi


이제 원래의 문제로 돌아가서, 예를 들어 파일 my_file.txt에 문자열 "abcd"가 존재하느냐 여부에 따라서 뭔가 다른 작업을 해야 하는 경우를 생각해 보자. if 조건에 grep을 이용한 문자열 검색의 결과를 사용해서 이 결과의 길이가 0인지 아닌지를 판단하면 될 것이다.

# my_file.txt에 문자열 "abcd" 존재 여부 확인
if [[ -z `grep "abcd" my_file.txt` ]]
  then echo "my_file.txt에 문자열 abcd가 존재하지 않습니다."
  else echo "my_file.txt에 문자열 abcd가 존재합니다."
fi


grep으로 문자열을 검색하는 명령을 역따옴표를 이용해서 if 조건문 안에 넣고, 그 출력값의 길이가 0인지를 판별하는 형태로 만들면 되겠다.

앞에서 뭔가 작업을 통해서 결과 파일이 생겼는데 이 결과 파일 내용에 따라 서로 다른 작업을 지정해 주고 싶을 때 편리하다.



덧글

  • 코린이 2021/10/12 17:35 # 삭제 답글

    혹시 if조건문으로 특정 폴더에 있는 여러 파일중에서

    특정 단어를 포함하는 모든 파일을 조건식이나 옵션 설정은 어떻게 하시는지 아시나요ㅠ
    방법이 너무 궁금합니다 ㅎㅎ

    if [-e *.log ]; then 이런식으로 식을 만들었는데 *을 문구로 인식하네요 ㅠㅠ
  • 반달가면 2021/10/12 22:00 #

    디렉토리에 여러 개의 파일이 있는데, 파일의 내용에 특정 단어를 포함한 파일들만 골라내서 뭔가 작업을 해야 하는 것인가요? 만약 그렇다면 본문의 내용과 for 반복문을 조합해야 될 것 같습니다. (상황을 좀 더 구체적으로 설명해 주시면 좋을 것 같네요.)
  • 코린이 2021/10/13 08:52 # 삭제 답글

    디렉토리에 파일의 이름이 1_fail.log , 2_fail.log , 3_fail.log , result.log , mod.log 라는 파일이 생성되었을때 파일 이름 중에 fail.log라는 단어가 있는 파일의 경우(파일 내용 X) 어떠한 동작을 수행하게 하고싶은데 if조건문의 옵션 중에는 이런 옵션이 없는것 같더라구요~ 다른 방법을 써야하는건지 ㅠ 조언 주시면 감사드리겠습니다.
  • 반달가면 2021/10/13 23:23 #

    if 보다는 for 반복문이 적합해 보입니다. 아래의 예시를 참고해 보시기 바랍니다. 파일명에 fail.log가 있으면 해당 파일의 내용을 출력하는 예시입니다.

    for file in `ls | grep "fail.log"`
    do
    cat "$file"
    done
  • 코린이 2021/10/14 10:04 # 삭제 답글

    아하 for 반복문을 사용해야 하는군요! 해당 조건식에 대한 공부를 또 해봐야 겠습니다 ㅎㅎㅎ 상세히 알려주셔서 고수님께 너무 감사 드립니다. 좋은 하루 되십시요~!
  • 반달가면 2021/10/15 19:55 #

    도움 되었다니 다행입니다~
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.



통계 위젯 (화이트)

310398
2207
2432111

2019 대표이글루_IT

B-Side