Como combinar um sufixo de nome de arquivo

3

Como verificar se o nome do nome do arquivo .xml terminou em .any-string ? por exemplo. .previous ou .backup ou bck12 etc ...

Eu preciso imprimir o nome do arquivo XML, exceto os arquivos XML que terminam com .any-string ou possuem algo após o .xml

Como verificar isso com grep ou awk ou sed ou perl ou qualquer outra ideia? Algo como

 file=machine_configuration.xml
 file=machine_configuration.xml.previos
 file=machine_configuration.xml.backup
 echo $file | .....

Exemplos:

  1. machine_configuration.xml : sim
  2. machine_configuration.xml.OLD : no
  3. 'machine_configuration.xml-HOLD: não
  4. machine_configuration.xml10 : no
  5. machine_configuration.xml@hold : no
  6. machine_configuration.xml_need_to_verifi_this : no
por yael 02.01.2013 / 10:38

4 respostas

4

Use a âncora final de regex ( $ ), por exemplo:

echo "$file" | grep '\.xml$'

Para encontrar todos os arquivos terminados com "xml", sugiro usar o comando find , por exemplo:

find . -name '*.xml'

Listaria recursivamente todos os arquivos xml do diretório atual.

    
por 02.01.2013 / 10:43
1

Se bem entendi, você deseja detectar se um nome de arquivo termina em .xml .

case $file in
  *.xml) echo "$file";;
esac

Se você quiser fazer algo quando o nome do arquivo não corresponder:

case $file in
  *.xml) echo "matched $file";;
  *) echo "skipping $file";;
esac
    
por 03.01.2013 / 00:10
0

Se você já tem o nome do arquivo em uma variável, uma boa abordagem seria a expansão do parâmetro

$ echo $file
text.xmllsls
$ echo ${file%.xml*}.xml
text.xml

Em que %.xml* é a última ocorrência de .xml e tudo o que está por trás dela será excluído. Por isso eu também repeti um .xml novamente.

Ou para fazer o teste também

$ file=test.xmlslsls
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
$
$
$ file="test.xml"
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
test.xml

Ou, em uma única linha

$ if [ $file = ${file%.xml*}.xml ]; then echo $file; fi
    
por 02.01.2013 / 11:10
-1

maneira mais fácil ...

echo  file=machine_configuration.xml | cut -d '.' -f 1
    
por 13.05.2015 / 07:42