1

I'm trying to pipe multiple lines into a text file while manipulating the string that is being piped according to a sequence

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

doesn't work. The output should look like this:

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

but the output is:

My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
My string $(echo $i)
mcExchange
  • 3,398

2 Answers2

2

You can do it all with printf and brace expansion:

$ 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

If for some reason you must generate the input sequence with more padding than you really want, printf will reformat it for you:

$ 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
steeldriver
  • 142,475
2
for i in {00000..00005}; do echo "${i/???/My string }"; done >> outfile.txt

Output to outfile.txt:

My string 00
My string 01
My string 02
My string 03
My string 04
My string 05
Cyrus
  • 5,789