5 votes

Remplacer une chaîne par le contenu d'un fichier multiligne

Je dois remplacer la chaîne de caractères SALT dans un fichier avec le contenu d'un autre fichier. Le problème est que le fichier d'entrée contient plusieurs lignes. J'ai essayé quelque chose comme ceci dans mon script bash :

SALT=`cat salt.txt`;
sed "s/SALT/$SALT/" wp-config.php > result.txt

Il fonctionne bien lorsque le salt.txt est d'une seule ligne, mais s'il y a plus de lignes, il échoue. J'ai lu qu'il pouvait faire du PERL. Mais je ne sais pas comment. Pouvez-vous m'aider ?

1voto

Sylvain Pineau Points 59212

Autre perl manière :

perl -pe 's/SALT/`cat salt.txt`/e' wp-config.php > result.txt

L'élément clé est le /e qui nous permet d'utiliser une expression rationnelle de type perl en tant que chaîne de substitution.

1voto

ieplugin Points 216

Si vous voulez vous en tenir à bash choisissez un caractère qui n'apparaît ni dans votre chaîne ni dans votre fichier, disons @ ; puis :

SALT=`< salt.txt tr '\n' '@'`
sed "s/SALT/$SALT/" wp-config.php | tr '@' '\n' > result.txt

Ainsi, avant le remplacement, le newline de votre chaîne de caractères sont remplacés par @ et après le remplacement, le @ sont remplacés par des caractères newlines , de sorte que SALT n'est plus traité comme un tableau, mais comme une variable contenant une longue chaîne de caractères.

1voto

0x2b3bfa0 Points 7873

Vous pouvez le faire :

sed -e "/SALT/{r salt.txt" -e "d}" wp-config.php  > result.txt

salt.txt est le sel, wp-config.php est le fichier d'entrée et SALT est la chaîne à remplacer

0voto

John O'Brien Points 21
perl -e 'open my $S, "<", "salt.txt" or die $!;
         $salt = do { local $/ ; <$S> };
         s/SALT/$salt/, print while <>;
        ' wp-config.php > result.txt

La première ligne ouvre le salt.txt .
La deuxième ligne lit son contenu dans la variable $salt.
La troisième prend les arguments de la ligne de commande comme noms de fichiers, lit les fichiers ligne par ligne et remplace la chaîne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X