1 votes

manipuler une chaîne de caractères qui est envoyée dans un fichier en utilisant bash

J'essaie d'envoyer plusieurs lignes dans un fichier texte tout en manipulant la chaîne qui est envoyée en fonction d'une séquence.

cmd="My string 00"

for i in $(seq -f "%02g" 00 05); \
  do \
  echo $(echo $cmd | sed -e 's|00|$(echo $i)|g') >> outfile.txt ;  \
done

ne fonctionne pas. La sortie devrait ressembler à ceci :

My string 00  
My string 01  
My string 02  
My string 03  
My string 04  
My string 05  

mais la sortie est :

My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)

2voto

Cyrus Points 4962
for i in {00000..00005}; do echo "${i/???/My string }"; done >> outfile.txt

Sortie vers outfile.txt :

My string 00
My string 01
My string 02
My string 03
My string 04
My string 05

2voto

steeldriver Points 118154

Vous pouvez tout faire avec printf et l'expansion de l'accolade :

$ printf 'My string %02d\n' {0..5} > outfile.txt

$ cat outfile.txt 
My string 00
My string 01
My string 02
My string 03
My string 04
My string 05

Si pour une raison quelconque vous doit générer la séquence d'entrée avec plus de remplissage que ce que vous voulez vraiment, printf le reformatera pour vous :

$ printf 'My string %02d\n' $(seq -f "%05g" 00 05)
My string 00
My string 01
My string 02
My string 03
My string 04
My string 05

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