Como extrair uma string de um nome de arquivo?

1

Estou tentando ler uma parte de um nome de arquivo para torná-lo em uma instrução if .. else

por exemplo: nome do arquivo: foo_bar_test1_example.stat

Eu quero fazer um teste; Se a palavra: example existir no nome do arquivo, então existem alguns scripts para executar.

Agradecemos antecipadamente:)

    
por pietà 01.03.2016 / 13:42

2 respostas

3

Com bash , você pode fazer o seguinte:

#!/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

EDIT: simplificação com correspondência de regex de bash , como sugerido por @JeffSchaller:

if [[ "$file" =~ $string ]] ; then
    
por 01.03.2016 / 13:51
5

case é o constructo para isso em shells da família Bourne (Bourne, Almquist, ksh, bash, zsh, yash ...):

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

Em shells da família csh (csh, tcsh):

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

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

No fish shell:

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

com rc ou aganga :

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

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

com es :

if {~ $file *example*} {
  do-something-with $file
} {
  do-something-else-with $file
}
    
por 01.03.2016 / 13:50