shell
  • unix
  • 2010-04-29 6 views 0 likes 
    0

    comment remplacer un ensemble de lignes dans un fichier avec une autre série de lignes unix?comment remplacer un ensemble de lignes dans un fichier avec un autre ensemble de lignes dans unix?

    #!/usr/bin/ksh 
    export text1='log_file=$LOG_PATH${UNISON_JOB}".log"' 
    export text2='\. \$\{env_path\}set_test_log_file\.ksh' 
    export text3='log_file\=\$LOG_PATH\$\{UNISON_JOB\}\"\.log\"' 
    
    echo $text1 
    echo $text2 
    echo $text3 
    
    for file in `grep -il ${text1} SANDEEP` 
    do 
    sed 's/${text3}/${text2}/g' $file > /$file.tmp 
    mv /$file.tmp $file 
    echo $file 
    done 
    

    J'ai essayé le code ci-dessus mais il ne fonctionne pas. son kshell .here sandeep est le nom du fichier que je cherche.

    +1

    On ne sait pas ce que vous essayez d'accomplir. Pouvez-vous poster un exemple de fichier avant et après le remplacement? – sha

    +0

    son remplacement n'a rien .i juste essayer de trouver text1 et remplacer text3 avec le texte 2 .Ici text1 et texte 3 sont les mêmes – Arunachalam

    Répondre

    0

    La raison pour laquelle cela ne fonctionne pas parce que vous utilisez est qoutes unique pour la commande sed.

    La commande sed tente de remplacer le littéral texte ${text3} avec ${text2}. Qu'est-ce que vous voulez qu'il est à remplacer la valeur de $text3 avec la valeur de $text2.

    Pour utiliser des variables dans l'expression sed vous devez utiliser des guillemets doubles.

    Autre astuce: si vous n'avez pas besoin du fichier temporaire, vous pouvez aussi utiliser l'option -i de sed pour éditer le fichier en place.

    Espérons que cela aide.

    0

    Pour sed avec la citation, j'aime écrire commande tout dans un fichier, puis exécutez ce fichier: quelque chose comme ceci:

    echo "s/${text1}/${text2}/g" > a.sed 
    sed -f a.sed <inputFile> tmp && mv tmp inputFile 
    rm -f a.sed 
    

    qui sauvera beaucoup de mal à faire face à ces choses de devis .

    Questions connexes