2012-08-14 4 views
0

Moi et un ami travaillons sur un projet, et nous devons créer un script qui peut aller dans un fichier, et remplacer toutes les occurrences d'une certaine expression/mot/lettre avec un autre en utilisant Sed. Il est conçu pour passer par plusieurs tests remplaçant toutes ces occurrences, et nous ne savons pas ce qu'ils seront, nous devons donc anticiper n'importe quoi. Nous avons des problèmes avec un certain test où nous devons remplacer 'l *' par 'L' dans différents fichiers en utilisant une boucle. Le code que j'ai estProblèmes avec les scripts shell en utilisant Sed

#!/bin/sh 
p1="$1" 

shift 

p2="$1" 

shift 

for file in "[email protected]" #for any file in the directory 
do 
    # A="$1" 

    #echo $A 
    #B="$2" 
    echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g' > temporary #treat all special characters as plain text 
    A="`cat 'temporary'`" 
    rm temporary 
    echo "$p1" 
    echo "$file" 
    sed "s/$p1/$p2/g" "$file" > myFile.txt.updated #replace occurances 
    mv myFile.txt.updated "$file" 
    cat "$file" 
done 

J'ai essayé de tester cela sur les fichiers de pratique qui contiennent des mots différents et aussi « l * » Mais chaque fois que je le tester, il supprime tout le texte dans le fichier. Quelqu'un peut-il m'aider avec cela, nous aimerions le faire bientôt. Merci

+0

Bienvenue dans Stack Overflow. Si cette question concerne un devoir, veuillez ajouter l'étiquette de devoirs. – pb2q

Répondre

2

Il semble que vous essayez de définir A à une version de p1 avec tous les caractères spéciaux échappés. Mais vous utilisez p1 plus tard au lieu de A. Essayez d'utiliser la variable A, et essayez également de le définir sans fichier temporaire:

A=$(echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g') 
+0

Merci SOOOO Ça a beaucoup fonctionné :) Nous avons passé littéralement la semaine dernière à travailler sur ce problème. J'apprécie tellement – user1598717