Couple of points:
1. Please use [code][/code] tags around code or data to protect formatting
2. 'Invalid args' whilst semi-informative it does not advise what the correct input may have been
3. $() is clearer and more versatile than ``
4. [] is preferred over  and (()) preferred for arithmetic
5. Use your globbing directly in the for loop and try not to use ls. This example may not have issues but should your files names have unusual characters, such as spaces, the for loop will not behave as expected
for i in $indir/$filename[a-z].txt
6. Use meaningful variable names, like the 'i' in for loop above as in a large script the start of the loop may be many lines back so when you come across $i you have no real idea what it refers to
7. An alternative to basename is using the ## bash construct
8. Quote all variables, again to preserve any unusual characters ... of course the caveat is you may well want the unusual characters to expand
9. Quote sed statements (I have also shown quoting for variables below)
sed 's/^L/1/g' "$indir/$i" > "$outdir/$i"
10. You go from indir_i to outdir_i to outdir_filename and then remove outdir_i. Why not cut out the middle man and simply redirect the sed immediately into outdir_filename. This also allows you to remove the basename
line as well as we can now simply use our for loop variable:
sed 's/^L/1/g' "$i" >> "$outdir/$filename"
11. sed pattern flag, 'g', makes no sense based on your requirement that we are looking at the start of the line. Currently you will replace '^L' anywhere in the line and not specifically at the start.
Here is the alternative:
sed 's/^^L/1/' "$i" >> "$outdir/$filename"
Above are merely suggestions
Ok, on to your actual question. You are already replacing the '^L' so now you need to tell sed what to do for the non-^L starting lines.
Important tip here is that you need to process the non-^L lines first (try placing solution below in the alternate order and see what happens:
sed -re 's/^([^^L])/ \1/' -e 's/^^L/1/' "$i" >> "$outdir/$filename"