How can I attenuate any signal to 5V peak-peak?
If you want to linearly attenuate a signal of unknown amplitude to a fixed amplitude, you will need a variable attenuation (or variable gain before or after fixed attenuation) stage, a way to measure the amplitude at the output (or in some versions, the input), and a feedback control system to adjust the variable stage based on the measurement to achieve the desired output.

This is commonly known as an "automatic gain control" or "automatic level control" and it's a common feature in radio receivers for both voice and data use, as well as similar places where information is encoded or recovered, such as disk drives.

If you do not care about distorting the signal, then various types of saturating constructs are possible where the gain "goes soft" as a certain level is neared, however by distorting the waveform from a pure sinusoid (flattening the tops) they introduce spurious harmonic frequencies.  As a result, application of such non-adaptive methods is limited to situations where this is distortion is acceptable or can be cleaned up later.  Your hard clipping is simply the extreme form of this.  However, if the frequency range of interest is known, you might be able to clean up the output with a low pass filter passing the fundamental frequency but removing the higher harmonics, or with a phase locked loop to regenerate a clean signal at the same frequency as the input.

But even an automatic gain control loop will slightly distort certain types of signals, for example those with low frequency AM modulation.  The loop has some response over time to adjust the gain to achieve a steady output as the input level varies; typically the time constant of this response is chosen so it won't defeat the audio-frequency level-variation-over-time that is AM modulation, but there's a trade-off between and the time it takes to respond to a true change in input "level" and the tendency to partially cancel out lower frequency components of the modulation.