Ini yang lain sed:
sed -e:n -e'/\n#.*\ndotan/!{$!{N;/^#/bn' \
-eb -e\} -e'/^#/s/\(\n\)\(dotan.*\)*/\1#\2/g' \
-et -e\} -eP\;D <in >out
Itu sesuai dengan yang Anda minta. Ini hanya bekerja pada tumpukan - membangunnya bila perlu dan selama diperlukan antara kemunculan baris yang dikomentari, dan membuang buffer lama demi baris komentar baru lebih lanjut di input ketika menemukan satu. Gambar...

Maaf, saya tidak tahu mengapa saya melakukan itu. Tapi itu terlintas dalam pikiran.
Bagaimanapun, sedsebarkan buffernya di antara setiap baris komentar terakhir dalam seri apa pun, jangan pernah menyimpan satu pun buffer lebih dari yang diperlukan untuk secara akurat melacak kejadian yang terakhir dikomentari, dan jika sewaktu-waktu ia menemukan baris terakhir saat melakukan itu akan mencoba gpernyataan eksekusi lobal terakhir dan cabang tseluruh buffer keluar untuk dicetak, kalau tidak itu akan Pmembatalkan semua baris yang dilepaskan dari buffer segera setelah itu.
Saya kira inilah yang membawa akordeon ke pikiran ...
printf %s\\n \#alice \#bob charlie dotan eric \
\#alice \#bob charlie dotan eric \
\#alice \#bob charlie dotan eric |
sed -e:n -e'l;/\n#.*\ndotan/!{$!{N;/^#/bn' \
-eb -e\} -e'/^#/s/\(\n\)\(dotan.*\)*/\1#\2/g' \
-et -e\} -eP\;D
#alice
#alice\n#bob$
#alice\n#bob\ncharlie$
#alice\n#bob\ncharlie\ndotan$
#alice
#bob\ncharlie\ndotan$
#bob\ncharlie\ndotan\neric$
#bob\ncharlie\ndotan\neric\n#alice$
#bob\ncharlie\ndotan\neric\n#alice\n#bob$
#bob\ncharlie\ndotan\neric\n#alice\n#bob\ncharlie$
#bob\ncharlie\ndotan\neric\n#alice\n#bob\ncharlie\ndotan$
#bob
charlie\ndotan\neric\n#alice\n#bob\ncharlie\ndotan$
charlie
dotan\neric\n#alice\n#bob\ncharlie\ndotan$
dotan
eric\n#alice\n#bob\ncharlie\ndotan$
eric
#alice\n#bob\ncharlie\ndotan$
#alice
#bob\ncharlie\ndotan$
#bob\ncharlie\ndotan\neric$
#bob\ncharlie\ndotan\neric\n#alice$
#bob\ncharlie\ndotan\neric\n#alice\n#bob$
#bob\ncharlie\ndotan\neric\n#alice\n#bob\ncharlie$
#bob\ncharlie\ndotan\neric\n#alice\n#bob\ncharlie\ndotan$
#bob
charlie\ndotan\neric\n#alice\n#bob\ncharlie\ndotan$
charlie
dotan\neric\n#alice\n#bob\ncharlie\ndotan$
dotan
eric\n#alice\n#bob\ncharlie\ndotan$
eric
#alice\n#bob\ncharlie\ndotan$
#alice
#bob\ncharlie\ndotan$
#bob\ncharlie\ndotan\neric$
#bob
#charlie
#dotan
eric
Hanya ada satu perbedaan antara perintah ini dan yang di atas dan itu adalah lperintah ook di atas. Ketika kita lmelihat sedruang pola saat berfungsi, kita bisa mendapatkan ide yang lebih baik tentang apa yang terjadi di balik layar dan pemahaman yang lebih baik tentang bagaimana mengarahkan usahanya.
Dalam hal ini kita dapat menonton sedinput tumpukan hingga menemukan kemunculan \n#.*\ndotaninput kedua, dan ketika itu mulai mencetak baris sebelumnya pada satu waktu. Agak keren. Saya belajar banyak tentang ini.