#!/bin/bash
s="abc
pattern1 X1 X2 X3
pattern2 X4 X5
abc2
..."
#sed -E ':a; s/^(pattern[0-9]+)([[:blank:]].*)X([0-9]+)$/\1-\3\n\1\2/; ta;' <<< "$s"
#sed -E ':a; s/^(pattern[0-9]+)([[:blank:]].*)X([0-9]+)$/\1\2\n\1-\3/g; ta' <<< "$s"
perl -pe 's{^(pattern\d+)((?:\s+X\d+)*)$}{ $res=join("\n$1-", split(/\s+X/,$2));$res=~s/^\n//r}ge' <<< "$s"
IyEvYmluL2Jhc2gKcz0iYWJjCnBhdHRlcm4xICAgIFgxIFgyIFgzCnBhdHRlcm4yICAgIFg0IFg1CmFiYzIKLi4uIgojc2VkIC1FICc6YTsgcy9eKHBhdHRlcm5bMC05XSspKFtbOmJsYW5rOl1dLiopWChbMC05XSspJC9cMS1cM1xuXDFcMi87IHRhOycgPDw8ICIkcyIKI3NlZCAtRSAnOmE7IHMvXihwYXR0ZXJuWzAtOV0rKShbWzpibGFuazpdXS4qKVgoWzAtOV0rKSQvXDFcMlxuXDEtXDMvZzsgdGEnIDw8PCAiJHMiCnBlcmwgLXBlICdze14ocGF0dGVyblxkKykoKD86XHMrWFxkKykqKSR9eyAkcmVzPWpvaW4oIlxuJDEtIiwgc3BsaXQoL1xzK1gvLCQyKSk7JHJlcz1+cy9eXG4vL3J9Z2UnIDw8PCAiJHMi