sedを使用して式から文字を削除する

sedを使用して式から文字を削除する

フォームに文字列があります。

  1. |a 一部のテキスト、文字、または数字。 |他のテキスト文字または数字| bテキストの他の部分| c他の文字または数字

バーは、「number.|other」のように単独で表示したり、「|a」、「|b」、「|c」などの文字で表示したり、最大「|z」まで表示することができます。

しかし、そうかもしれません

  1. |他の列のタイトルはありません

つまり、バーの数がわかりません。

sedに使用する2つの正規表現を見つける必要があります。

  1. 1つ目は、|aと|bまたは|bと|cの間のすべてのテキストを見つけることです。

1)で、例えば、

a|後ろ、b |上記のすべてのテキストを見つけると、次のようになります。

いくつかの単語、文字または数字。 |その他のテキスト文字または数字

上記の例ではb |後ろ、c |前のすべてのテキストを探します。

本文の他の部分

  1. |aの後のすべてのテキストを見つけるには、2番目の式が必要です。ただし、 |b で停止するのではなく、単にバーだけを削除するか (|) 他の文字を持つバーを削除すると、|a、|b、|c などが削除されます。一緒に。

1) 例えば:

一部のテキスト、文字または数字その他のテキスト文字または数字テキストの他の部分その他の文字または数字

ベストアンサー1

GNUユーティリティとデータファイルを想定するとdata

  1. grep -Po '(?<=\|a).*(?=\|b)' data

     Some text, letters or numbers. | Some other text letters or numbers 
    
  2. sed -r -e 's/^.?*\|a//' -e 's/\|[a-z]?//g' data

     Some text, letters or numbers.  Some other text letters or numbers  some other part of text  some other letters or numbers 
     Title without any other bars 
    

必要に応じてなどを|a変更してください。|b|c|d

これらのどれも|xマークアップの周りのスペースを削除しないため、テキストに先行スペースと末尾スペースがあります(どちらもここには表示できません)。これも削除するにはパターンに含める必要があります。

grep -Po '(?<=\|a ).*(?= \|b)' data
sed -r -e 's/^.?*\|a ?//' -e 's/ ?\|([a-z] ?)?//g' data

ここで書かれているように、このsedコマンドは個々のセクションを一緒に結合します。間にスペースを入れたい場合は、末尾//のスペースをに変更してください/ /

おすすめ記事