2

ドキュメント内の文を結合しようとしていますが、いくつかの文が途中で空行で分割されています。例えば:

その犬はボールを追いかけた

飼い主が投げたもの。

ボールはかなり遠くまで飛んだ。

に:

その犬は飼い主が投げたボールを追いかけた。

ボールはかなり遠くまで飛んだ。

空行を検索してから、次の行の先頭で小文字を検索できると考えていました。その行をコピーし、その行とその上の空の行を削除してから、コピーした文を別の壊れた文に追加します (混乱して申し訳ありません)。

私はsedが初めてで、次のコマンドで試しました:

sed "/$/{:a;N;s/\n\(^[a-z]* .*\)/ \1/;ba}"

しかし、それは一度だけで、空行を削除するだけで、壊れた文の後半を最初の部分に追加しません。

助けてください。

4

3 に答える 3

1

これでうまくいくはずです:

sed ':a;$!{N;N};s/\n\n\([a-z]\)/ \1/;ta;P;D' sentences
于 2010-01-15T23:01:00.003 に答える
0

Pythonを使用している場合は、このスニペットを試すことができます

import string
f=0
data=open("file").readlines()
alen=len(data)
for n,line in enumerate(data):
    if line[0] in string.uppercase:
        found_upper=n
        f=1
    if f and line[0] in string.lowercase:
        data[found_upper] = data[found_upper].strip() + " " + line
        data[n]=""
    if n+1==alen:
        if line[0] in string.lowercase:
            data[found_upper] = data[found_upper].strip() + " " + line
            data[n]=""
        else : data[n]=line

出力(ファイル形式のシナリオを追加)

$  cat file    
the start
THE START
The dog chased after a ball
that was thrown by its owner.

My ball travelled quite far




and it smashed the windows
but it didn't cause much damage


THE END
THE FINAL DESTINATION
final
FINAL DESTINATION LAST EPISODE
the final final

$ ./python.py
the start
THE START
The dog chased after a ball that was thrown by its owner.

My ball travelled quite far and it smashed the windows but it didn't cause much damage






THE END
THE FINAL DESTINATION final
FINAL DESTINATION LAST EPISODE the final final the final final
于 2010-01-16T06:50:53.350 に答える
0

初めて sed を使用してこのような複雑な置換を実行しました。何かを思いつくのに約2時間かかりました:D

私は GNU を使用sedしました。Mac で 1 行で分岐を機能させることができなかったからです。

テストに使用した入力コンテンツは次のとおりです。

The dog chased after a ball

that was thrown by its owner.

The ball

travelled quite far.
I took me a while to fix this file.
And now it's

working :)

次に、sed私が思いついたコマンドラインは次のとおりです。

$ sed -n '/^$/!bstore;/^$/N;s/\n\([a-z]\)/ \1/;tmerge;h;d;:store;H;b;:merge;H;g;s/\n \([a-z]\)/ \1/;p;s/.*//g;h;d' sentences.txt

出力は次のとおりです。

$ sed -n '/^$/!bstore;/^$/N;s/\n\([a-z]\)/ \1/;tmerge;h;d;:store;H;b;:merge;H;g;s/\n \([a-z]\)/ \1/;p;s/.*//g;h;d' sentences.txt

The dog chased after a ball that was thrown by its owner.

The ball travelled quite far.

I took me a while to fix this file.
And now it's working :)

最初に空の行が挿入されていることがわかりますが、それで問題ないと思います。sedこれは初心者の撮影なので、マスターしている場合はコメントしてください。

于 2010-01-15T22:30:37.583 に答える