J'ai une variable qui a la valeur "abcd.txt"
.
Je veux tout stocker avant le ".txt"
dans une seconde variable, en remplaçant le ".txt"
par ".log"
Je n'ai aucun problème à faire écho à la valeur souhaitée:
a="abcd.txt"
echo $a | sed 's/.txt/.log/'
Mais comment puis-je obtenir la valeur "abcd.log"
dans la deuxième variable?
Vous pouvez utiliser substitution de commande comme:
new_filename=$(echo "$a" | sed 's/.txt/.log/')
ou la méthode moins recommandée de backtick:
new_filename=`echo "$a" | sed 's/.txt/.log/'`
Vous pouvez utiliser des backticks pour assigner le résultat d'une commande à une variable:
logfile=`echo $a | sed 's/.txt/.log/'`
Cela suppose que vous utilisez Bash.
Alternativement, pour ce problème particulier, Bash a des structures de correspondance de modèle:
stem=$(textfile%%.txt)
logfile=$(stem).log
ou
logfile=$(textfile/%.txt/.log)
Le% dans le dernier exemple assurera que seul le dernier fichier .txt est remplacé.
si vous avez bash/ksh
$ var="abcd.txt"
$ echo ${var%.txt}.log
abcd.log
$ variable=${var%.txt}.log
Le plus simple est
logfile="${a/\.txt/\.log}"
S'il est permis que le nom de fichier dans $a
ait plusieurs occurrences de .txt
, utilisez la solution suivante. C'est plus sûr. Cela ne change que la dernière occurrence de .txt
logfile="${a%%\.txt}.log"