sedを使用してこれを実行できますか?

sedを使用してこれを実行できますか?

私はいくつかのテキスト処理を実行するための単純なPythonプログラムを書いています。 sedを使って演劇/舞台演劇のテキストを入力として使って文を行に分割したいと思います。 sedを使って書いてみましたが失敗しました。 sedでできるか知りたいです。


    import re
    
    test_txt = """
    Brigitte:
    Ich hoffe, du hast während des Lockdowns nicht alle Benimmregeln vergessen.
    Bernd:
    Entschuldige bitte. Das muss an der Vorfreude liegen. Endlich wieder kann ich meinen
    Cappuccino im Sitzen genießen und muss ihn nicht heimlich aus einem Pappbecher in
    irgendeiner Nische in der Fußgängerzone trinken. Wie nervig das war, Maske runter,
    einen Schluck trinken, Maske wieder auf, und immer die Gegend im Blick haben, damit ich
    die Leute vom Ordnungsamt rechtzeitig sehe.
    Brigitte:
    Das ist mal wieder typisch. Du denkst nur an dich und lässt dabei das Wesentliche aus
    den Augen.
    Bernd:
    Häh?
    (Fesnik erscheint, bringt die Karten)
    Fesnik:
    Herzlich willkommen im Adria, schön, dass sie bei uns sind.
    Bernd:
    Ich habe Ihren Cappuccino wirklich vermisst.
    Brigitte:
    Wir hatten schon Angst, dass Sie nicht wieder aufmachen.
    Fesnik:
    Eine unbegründete Sorge, Signorina.
    (Fesnik ab, Bernd und Brigitte studieren die Karten)
    Brigitte:
    Signorina heißt Fräulein, wusstest du das eigentlich? Typisch Italiener, schleimen uns
    """
    
        actor_pattern = '.+:'
        lines = test_txt.splitlines()
        speech = ''
        i = 0
        while i < len(lines):
            if re.match(actor_pattern, lines[i]):
                while True:
                    speech += lines[i].replace('\n', ' ').replace(
                        '. ', '.\n').replace(
                        '? ', '?\n').replace(
                        '! ', '!\n').replace(
                        ') ', ')\n')
                    i += 1
                    if not i < len(lines):
                        break
                    if re.match(actor_pattern, lines[i]):
                        print('')
                        break
            else:
                i += 1
            print(speech, end='')
            speech = ''
        print('\nEND')

出力は次のとおりです。

Brigitte:Ich hoffe, du hast während des Lockdowns nicht alle Benimmregeln vergessen.
Bernd:Entschuldige bitte.
Das muss an der Vorfreude liegen.
Endlich wieder kann ich meinenCappuccino im Sitzen genießen und muss ihn nicht heimlich aus einem Pappbecher inirgendeiner Nische in der Fußgängerzone trinken.
Wie nervig das war, Maske runter,einen Schluck trinken, Maske wieder auf, und immer die Gegend im Blick haben, damit ichdie Leute vom Ordnungsamt rechtzeitig sehe.
Brigitte:Das ist mal wieder typisch.
Du denkst nur an dich und lässt dabei das Wesentliche ausden Augen.
Bernd:Häh?(Fesnik erscheint, bringt die Karten)
Fesnik:Herzlich willkommen im Adria, schön, dass sie bei uns sind.
Bernd:Ich habe Ihren Cappuccino wirklich vermisst.
Brigitte:Wir hatten schon Angst, dass Sie nicht wieder aufmachen.
Fesnik:Eine unbegründete Sorge, Signorina.(Fesnik ab, Bernd und Brigitte studieren die Karten)
Brigitte:Signorina heißt Fräulein, wusstest du das eigentlich?
Typisch Italiener, schleimen uns
END

コードは、actor_patternを見つけて次の行にリンクし、別のactor_patternが見つかるまで各文を新しい行に分割し、このようにして行を続行します。

ベストアンサー1

「actor_pattern」が何なのか、使い方が何なのかよくわかりません。この簡単なことはどのくらい行くことができますかsed?必要な結果に非常に近いですが、いくつかの改善が必要な場合があります。

sed -Ez 's/\n/ /g; s/([.?!)]) ([^(])/\1\n\2/g' file
Brigitte: Ich hoffe, du hast während des Lockdowns nicht alle Benimmregeln vergessen.
Bernd: Entschuldige bitte.
Das muss an der Vorfreude liegen.
Endlich wieder kann ich meinen Cappuccino im Sitzen genießen und muss ihn nicht heimlich aus einem Pappbecher in irgendeiner Nische in der Fußgängerzone trinken.
Wie nervig das war, Maske runter, einen Schluck trinken, Maske wieder auf, und immer die Gegend im Blick haben, damit ich die Leute vom Ordnungsamt rechtzeitig sehe.
Brigitte: Das ist mal wieder typisch.
Du denkst nur an dich und lässt dabei das Wesentliche aus den Augen.
Bernd: Häh? (Fesnik erscheint, bringt die Karten)
Fesnik: Herzlich willkommen im Adria, schön, dass sie bei uns sind.
Bernd: Ich habe Ihren Cappuccino wirklich vermisst.
Brigitte: Wir hatten schon Angst, dass Sie nicht wieder aufmachen.
Fesnik: Eine unbegründete Sorge, Signorina. (Fesnik ab, Bernd und Brigitte studieren die Karten)
Brigitte: Signorina heißt Fräulein, wusstest du das eigentlich?
Typisch Italiener, schleimen uns 

sedバージョンは(GNU sed)4.7です。スクリプトはこの-zオプション(一部のバージョンでは使用できません)を使用してテキスト全体をメモリに読み込み、すべての<NL>文字を空白に置き換えて1つの長い行を形成し、すべての<NL>文末尾の文字の後に文字を追加します。

おすすめ記事