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

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

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

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>

答え2

簡単です。以下を使用してください。

sed -Ee 's/(.*[0-9])(.*)/\1 <s>\2 <\/s>/'

あなたの場合:

cat file | sed -Ee 's/(.*[0-9])(.*)/\1 <s>\2 <\/s>/' | less

ただし、sed コマンドの後にファイル名を使用し、パイプの使用を避けることをお勧めします。つまり:

sed -Ee 's/(.*[0-9])(.*)/\1 <s> \2 <\/s>/' file

オプションを使用してファイルを直接編集しますi

答え3

$ awk '{ $1 = $1 " <s>"; $(NF+1) = "</s>"; print }' file
TEXT1910\text0001 <s> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” </s>

<s>これは、スペースで区切られた最初のフィールドの後にスペースと開いたタグを追加し、最後に閉じるタグを新しいフィールド</s>として追加します。次に、変更された行を印刷します。

これにより、データ内の複数のスペースが単一のスペースに縮小されます。

答え4

必要なのは、次のように機能するhtmlなどの構文で囲まれた最後の二重引用符の最初の二重引用符です。

sed -e 's|".*"|<s> & </s>|'  inputfile

関連情報