applying discount to items NOT including shipping

I am offering 20% off first order not including shipping for signing up for newsletter.

I have a handful of items that INCLUDE shipping. I do not want to apply the 20% to the total of those items that include shipping.

For example, a $100 item that includes $10 shipping, I want to give an $18 discount, not a $20 discount. I don't mark up shipping so this is important. I actually lose money on shipping by applying the 20% to the product total.

Is there a way to offer the 20% on items without having to define every item as a condition and exclude the items that include shipping?