3 votes

Sélectionner des mots particuliers dans une chaîne de caractères

La chaîne de caractères (contents1) contient ce qui suit

755572 ZR66_op/Res7.fcp 755676 ZR66_op/Res-Edited-MP3-Files 755677 ZR66_op/Res-Files 756876 ZR66_op/Res-Edited-WAV-Files 758228 ZR67_op/Res5.fcp 758224 ZR66_op/Res-Original-Audio-Files 758225 ZR67_op/Res-Edited-Files

Je veux collecter uniquement les éléments suivants dans la chaîne de caractères (contents2)

755572 ZR66_op/Res7.fcp 755676 ZR66_op/Res-Edited-MP3-Files 755677 ZR66_op/Res-Files 756876 ZR66_op/Res-Edited-WAV-Files 758224 ZR66_op/Res-Original-Audio-Files

les ZR66_op sera l'élément de recherche

Quelqu'un peut-il m'aider ?

2voto

choroba Points 56333

Vous pouvez utiliser la recherche de motifs :

#! /bin/bash
search=ZR66_op

contents1=755572\ ZR66_op/Res7.fcp\ \
755676\ ZR66_op/Res-Edited-MP3-Files\ \
755677\ ZR66_op/Res-Files\ \
756876\ ZR66_op/Res-Edited-WAV-Files\ \
758228\ ZR67_op/Res5.fcp\ \
758224\ ZR66_op/Res-Original-Audio-Files\ \
758225\ ZR67_op/Res-Edited-Files

ar=($contents1)

for (( i=0; i/2<=${#ar}; i+=2 )) ; do
    if [[ ${ar[i+1]} == "$search"* ]] ; then
        contents2+="${ar[i]} ${ar[i+1]} "
    fi
done

contents2=${contents2% } # Remove the extra space
echo "$contents2"

0voto

Barton Chittenden Points 2070

Lorsque vous travaillez avec une chaîne délimitée par un espace blanc et que vous extrayez des tokens de la chaîne en ensembles de taille fixe (paires, triples, etc.), vous pouvez utiliser "read" pour charger les tokens dans des variables :

#! /bin/bash
contents1='755572 ZR66_op/Res7.fcp 755676 ZR66_op/Res-Edited-MP3-Files 755677 ZR66_op/Res-Files 756876 ZR66_op/Res-Edited-WAV-Files 758228 ZR67_op/Res5.fcp 758224 ZR66_op/Res-Original-Audio-Files 758225 ZR67_op/Res-Edited-Files'

search=ZR66_op

contents2=""
while read number filename
do
    if [[ $filename == "$search"* ]]
    then
        contents2="$contents2 $number $filename "
    fi
done <<< $contents1

echo $contents2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X