파일 이름에서 문자열을 추출하는 방법은 무엇입니까?

파일 이름에서 문자열을 추출하는 방법은 무엇입니까?

if .. else명령문 에 삽입하기 위해 파일 이름의 일부를 읽으려고 합니다.

예를 들어: 파일 이름: foo_bar_test1_example.stat

테스트를 하고 싶습니다. 파일 이름에 단어가 있으면 example실행할 스크립트가 있는 것입니다.

미리 감사드립니다 :)

답변1

caseBourne 시리즈 쉘(Bourne, Almquist, ksh, bash, zsh, yash...)의 구성입니다.

case $file in
  *example*) do-something-for-example "$file";;
  *) do-something-else-if-not "$file";;
esac

시리즈 쉘 csh(csh, tcsh):

switch ($file:q)
  case *example*:
    do-something-with $file:q
    breaksw

  default:
    do-something-else-with $file:q
    breaksw
endsw

fish셸 에서 :

switch $file
  case '*example*'
    do-something-with $file
  case '*'
    do-something-else-with $file
end

또는 :rcaganga

switch ($file) {
  case *example*
    do-something-with $file

  case *
    do-something-else-with $file
}

그리고 es:

if {~ $file *example*} {
  do-something-with $file
} {
  do-something-else-with $file
}

답변2

bash다음을 수행할 수 있습니다 .

#!/bin/bash
#let's look for an a in our handful of files
string="a"
for file in aa ab bb cc dd ad ; do
  #note the placement of the asterisks and the quotes
  #do not swap file and string!
  if [[ "$file" == *"$string"* ]] ; then
     echo "$string in $file"
  else
     echo "no match for $file"
  fi
done

편집: bash@JeffSchaller의 제안에 따라 정규식 일치를 사용하여 단순화합니다.

if [[ "$file" =~ $string ]] ; then

관련 정보