このパターンを内部の改行文字に置き換えるにはどうすればよいですか? [コピー]

このパターンを内部の改行文字に置き換えるにはどうすればよいですか? [コピー]

以下を含むテキストファイルがある場合:

 someline
 <!--\
      file first read on 2015/01/11

「on」以降のすべての項目を削除したいと思います<!--\。どうすればいいですか?上記の例で予想される出力は次のとおりです。

someline
2015/01/11

私は日付を抽出するパターンを作成できません。その理由は、2015/01/11それが単なるものSundayでもYesterdayほぼ異なるものである可能性があるからです。read何でもできます。私はBSDで試しましたsed

sed 's/<!--\
     file first .* on//g'

ただし、このコマンドを実行すると、次のエラーが発生します。

sed: 1: "s/<!--\
        file f ...": unterminated substitute pattern

そのため、バックスラッシュをエスケープしようとしましたが、<同じ!「終了しない代替パターン」エラーが発生します。私はGNU sedのインストールを試みて同じことをしましたが、それ以外は試しましたが、次のような\n結果gsed 's/<!--:a;N;$!ba;s/\n/file first .* on//g'が出ました。

gsed: -e expression #1, char 22: unknown option to `s'

これはできませんかsed?それ以外の場合は、他のツール/言語を使用してどのようにこれを実行できますか?

ベストアンサー1

POSIX的に:

$ sed -e '/<!--/{
  $!N
  s/.*on //
}' <in >out

おすすめ記事