Bonjour, ca fait un bout de temps que je cherche un solution à ce problème, j'ai bien cherché sur le forum mais rien de similaire.

L'objectif de ce script est de retrouver des dates écrites du style "22/04/11", de les parsers et de les substituées.

Dans un premier temps, je me suis dirigé vers la fonction sed et le script suivant :
#Fonction qui prend en paramètre la date trouvée par sed, et qui est 
#supposé retourné une valeur lui correspondat
function parseDates(){
    #Some process here with $1 (the pattern found)
    echo "dateParsed-$1-"> log.txt
    echo "newVal"
}
export -f parseDates
et la commande sed suivante :
myCatFile=`sed -n 's/[0-3][0-9]\/[0-1][0-2]\/[0-9][0-9]/ '$(parseDates)' &/p' datefile`
où le & est la chaine représentant la date retrouvée.
Ce que je cherche à faire est d'appeller la fonction parseDates (ce qui fonctionne) mais de lui passer en plus en argument la date que sed vient de trouver.

Dans mon fichier log.txt je n'obtient que le resultat suivant :
"dateParsed--"
Peut-être y a-t-il une autre solution.. Mais je trouvais celle-ci élégante.
Merci d'avance!
Si tu en ai déjà à te faire une fonction en script shell autant continuer la dessus et te passer de sed:
#!/bin/bash

function parseDates() {
        #Some process here with $1 (the pattern found)
        echo "dateParsed-$1-" >> log.txt
        echo "newVal"
}

# remise à zero du log
> log.txt

for dateFound in $(egrep -o "[0123][1-9]/[01][0-9]/[0-9]{2}" datefile); do
    parseDates $dateFound
done
Du coté de la substitution je suis arrivé a quelque chose de ce type
    for line in $(cat $myFile); do
            #Some process on the line (like if there is a space end line)
            line=`echo $line | sed -e 's#[ |    ]*$##g'`
            
            for dateFound in $(echo $line | egrep -o "[0123]?[1-9]/[01]?[0-9]/[0-9]{2}$"); do
                        #The buf tempLine
                         tempLine=""
                        
                         #echo "Date trouvée : "$dateFound
                         dateParsed=$(figureIt $dateFound)
                         tempLine=`echo $line | sed "s#$dateFound#& $dateParsed#g"`
                        line=$tempLine
            done;
            echo $line
            echo $line >> buffer
        done
Le seul soucis que j'ai est dans le :
for line in $(cat $myFile); do
est qu'il ne conserve pas les lignes vides. J'ai fait :
IFS=$'\r'
et j'ai vérifié, le cat prend bien en compte les lignes vides.

Je ne sais pas comment guarder les lignes vides..
Ou de manière plus générale : comment faire pour que la syntaxe suivante garde les lignes vides de mon fichier myfile.
#avec
IFS=$'\r'
for line in $(cat $myfile); do
     echo $line >> $myNewfile
done
une idée?