à travers le script bash, j'essaie de trouver un numéro de valeur à partir d'un texte dans un fichier, puis crée une nouvelle variable, puis la remplace par une chaîne dans ce fichier, par exemple. dans un fichier dans /root/test.txt, j'ai une chaîne web1, il faut couper le nombre "1" et l'augmenter de 1 pour qu'il soit 2 puis remplacer web1 par web2, c'est ce que j'ai fait jusqu'à présent comment le faire fonctionner?
#!/bin/bash
m=grep 'web' /root/test.txt | awk '{print $2}'
i= $m | cut -c3
i=i+1
n='web$i'
$ sed -i 's/$m/$n/g' /root/test.txt
Exemple de saisie:
project web0
Exemple de sortie:
project web1
AWK peut également rechercher et remplacer du texte. Il n'est donc pas nécessaire d'utiliser grep
ou sed
. Le code ci-dessous extrait la sous-chaîne de la deuxième colonne (webN
), incrémente N
et remplace le deuxième champ par webN+1
$ cat testInput.txt
project web0
other
project web1
$ awk '/web/{ num=substr($2,4)+1;$2="web"num };1' testInput.txt
project web1
other
project web2
Cela imprimera le fichier édité à l'écran. Vous pouvez enregistrer cela dans un autre fichier, tel que so awk [rest of code here] > fileName.txt
et remplacer l’original par new en utilisant mv fileName.txt oldFile.txt
.
Utiliser Perl:
Perl -pe 's/\bweb\K[0-9]+\b/$&+1/ge' file
Pour éditer le fichier en place, ajoutez l’option -i
:
Perl -i -pe 's/\bweb\K[0-9]+\b/$&+1/ge' file
-p
: Perl assume la boucle suivante autour de votre programme, ce qui le rend itératif sur les arguments de nom de fichier un peu comme sed:
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
-e
: peut être utilisé pour entrer une ligne de programme.s/\bweb\K[0-9]+\b/$&+1/ge
: correspond à n'importe quelle chaîne web
précédée d'une limite de mot, ignore la correspondance et correspond à un ou plusieurs chiffres suivis d'une limite de mot, en remplaçant la correspondance par le nombre équivalent augmenté de 1.% cat file
project web0
project web1
project web2
% Perl -pe 's/\bweb\K[0-9]+\b/$&+1/ge' file
project web1
project web2
project web3
Merci les gars, j'ai essayé ce code et cela a bien fonctionné pour moi,
#!/bin/bash
DPATH="/root/test.txt"
k=$(grep 'web' $DPATH | awk '{print $2}') # web ends by a number#
i=$(grep 'web' $DPATH | awk '{print $2}'| cut -c3)
m=$((i+1))
n="web$m"
sed -i -e 's/'"$k"'/'"$n"'/g' $DPATH