sedから特定の文字の前の文字を除外する

sedから特定の文字の前の文字を除外する

1行だけ印刷するファイルがあります。この行を操作するために他のsedコマンドを使用するのが困難です。

apple orange.5678 dog cat 009 you

私は"orange.5678"をつかみ、"you"を含み、他のすべてを無視したいと思います。以下のように見えるといいです。

orange.5678 you

どこから始めるべきか、「orange.5678」と「you」を除くすべての項目を除外する方法がわかりません。どんな助けでもいいでしょう!

ベストアンサー1

$ sed -r 's/.* ([^ ]+\.[^ ]+).* ([^ ]+)$/\1 \2/' orange
orange.5678 you

説明する

  • -r拡張正規表現の使用
  • s/old/newold使用。 。 。交換new
  • .*任意の文字数
  • (some characters)some characters後で交換するときに参考になるように保存してください。
  • [^ ]+空白以外の一部の文字
  • \.テキストポイント
  • $行末
  • \1保存されたスキーマの逆参照

つまりs/.* ([^ ]+\.[^ ]+).* ([^ ]+)$/\1 \2/、空白以外の文字の前の空白まで行のすべての項目を一致させ、.その後に空白以外の文字を一致させて(対応する文字を両側に保存.)、任意の文字を一致させ、最後の行セットを保存しないことを意味します。 - スペース文字をオンにし、一致全体をスペースで区切られた2つの保存されたパターンに置き換えます。

おすすめ記事