フォームに文字列があります。
|a 一部のテキスト、文字、または数字。 |他のテキスト文字または数字| bテキストの他の部分| c他の文字または数字
バーは、「number.|other」のように単独で表示したり、「|a」、「|b」、「|c」などの文字で表示したり、最大「|z」まで表示することができます。
しかし、そうかもしれません
|他の列のタイトルはありません
つまり、バーの数がわかりません。
sedに使用する2つの正規表現を見つける必要があります。
- 1つ目は、|aと|bまたは|bと|cの間のすべてのテキストを見つけることです。
1)で、例えば、
a|後ろ、b |上記のすべてのテキストを見つけると、次のようになります。
いくつかの単語、文字または数字。 |その他のテキスト文字または数字
上記の例ではb |後ろ、c |前のすべてのテキストを探します。
本文の他の部分
- |aの後のすべてのテキストを見つけるには、2番目の式が必要です。ただし、 |b で停止するのではなく、単にバーだけを削除するか (|) 他の文字を持つバーを削除すると、|a、|b、|c などが削除されます。一緒に。
1) 例えば:
一部のテキスト、文字または数字その他のテキスト文字または数字テキストの他の部分その他の文字または数字
ベストアンサー1
GNUユーティリティとデータファイルを想定するとdata
、
grep -Po '(?<=\|a).*(?=\|b)' data
Some text, letters or numbers. | Some other text letters or numbers
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
コマンドは個々のセクションを一緒に結合します。間にスペースを入れたい場合は、末尾//
のスペースをに変更してください/ /
。