デフォルトでは、次のような行があります。
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>