各行の文章にラベルを追加する

各行の文章にラベルを追加する

デフォルトでは、次のような行があります。

TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” 

私は彼らが次のように見えることを望みます:

TEXT1910\text0001 <s> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

次のコマンドを使用して動作しようとしました。

cat text.ign | sed -e 's/\(.*\) \(.*\)/ <s> \1 <\/s>\2/' | less

しかし、これは以下を生成します。

<s> TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

ベストアンサー1

目標を正しく説明したら、次を試してください。

sed 's| | <s> |; s|$|</s>|'

たとえば、ファイルから始めると、次のようになります。

$ cat text.ign 
TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” 

そして、次のコマンドを実行してください。

$ sed 's| | <s> |; s|$|</s>|' text.ign
TEXT1910\text0001 <s> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

仕組み:

  • s| | <s> |最初のスペースをに置き換えます<s>

    Sed では、代替コマンドですべての文字を区切り文字として使用できます。ここでは|伝統的な/

  • s|$|</s>|</s>行の末尾に追加してください。

    区切り記号として使用しているため、|エスケープにバックスラッシュは必要ありません</s>

元のコマンドはどうなりましたか?

私たちが持っている質問から:

$ sed -e 's/\(.*\) \(.*\)/ <s> \1 <\/s>\2/' text.ign 
 <s> TEXT1910\text0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

ここでの問題はsed正規表現の一致です。左が一番長いです。マッチ。これは、最初の項目が行\(.*\)の先頭から行の最後のスペースまですべてに一致することを意味します。もう 1 つは、\(.*\)最後の空白以降のすべての項目と一致します。

例の行は空白で終わるため、これは行全体を \(.*\)一致させ、\(.*\)他の行では何も一致しないことを意味します。したがって、行全体<s>の前後に配置されます。</s>

おすすめ記事