С помощью gnu awk с использованием gensub
awk '
/#/{
a=$0
b=length()
getline
$0=a RS$0
while($0!=a){
a=$0
$0=gensub("([^#]*)#(.{"b--"}).","\\1\\2",1)}
}1' infile
Объяснить:
/ #/ :для каждой строки с#
a=$0 :сохранить строку в a
b=длина():получить длину в b
getline :получить следующую строку
$0=a RS$0 :добавить предыдущую строку, хранящуюся в a, в начало буфера $0, за которым следует RS в качестве разделителя записей
Теперь $0 содержит 2 строки
в то время как ($0!=a):в то время как строка, хранящаяся в a, отличается от буфера $0
a=$0 :получить буфер $0 в a
$0=gensub (" ([^ #] *)#(.{"b --"} ).","\\1\\2",1):удалите первый #в $0 и соответствующий символ во второй строке
Одновременно уменьшить (b --)длину первой строки на 1, потому что 1 #было удалено
1 :когда в первой строке больше нет #выведите $0
Наконец, оказывается, что это связано с той же проблемой, что и в этой связанной записи . Он работал, отпуская Syst , удерживая Alt , затем нажимая B .
Это меня немного удивляет, потому что я использую настольный компьютер с портом клавиатуры PS/2 (, а не со встроенной клавиатурой ноутбука ). Раньше я работал с дешевой клавиатурой Logitech, которая всегда была проблемой, но, похоже, все равно делала свою работу. Когда эта клавиатура умерла, я установил обратно старую клавиатуру Compaq года выпуска 2K (Model KB -9963 ), которая работает довольно хорошо и очень приятна в использовании, но явно страдает от той же проблемы.