Это может сработать для вас (GNU sed):
sed -E 'N;N;/^.._./!{/^\S+\s.*X/!{P;d};s/^(\S+\s*)(.*\n\S+\s*)(.*\n\S+\s*)/\1\n\2\n\3\n/;:a;/\n\n/{s/\n+/\n/g;s/.$//;b};s/\n([X\t])(.*\n.*)\n(.)(.*\n.*)\n(.)/\1\n\2\3\n\4\5\n/;ta;s/\n(.)(.*\n.*)\n(.)(.*\n.*)\n(.)/\1\n\2\n\4\n/;ta}' file
Добавить следующие две строки к текущей строке.
Если контрольная строка не содержит X
, выведите в первой строке и удалите оставшиеся две.
В противном случае: вставьте три символа новой строки, по одной после клавиш каждой из трех строк в пространстве образца.
Используя al oop, проверьте символ, следующий за первой вставленной новой строкой, должен быть либо X
, либо табуляцией, и, если это так, переместите новую строку над ней и сделайте то же самое с двумя другими строками.
Если символ, следующий за вставленной новой строкой, не является любой из вышеперечисленных, переместите его для контрольной линии и удалите его в двух других строках.
Повторяйте, пока не обработается вся первая строка.
В конце строки При обработке вставленные символы новой строки удаляются, а результат печатается.