sedが空のコンテンツを印刷するのを防ぐ

sedが空のコンテンツを印刷するのを防ぐ
sed -e 's/\([A-Za-z]*\)\( \)\([A-Za-z]*\)\(:\?\)\([A-Za-z]*\)\?\( \)\?\(.*\)\?/[\1][\2][\3][\4][\5][\6][\7]/'

飾る

class VoxelbuilderAdda:public VoxelBuilder

だからそれは

[class][ ][VoxelbuilderAdda][:][public][ ][VoxelBuilder]

私が持っているなら

class VoxelBuilder

出力は次のとおりです

[class][ ][VoxelBuilder][][][][]

空の括弧が印刷されるのを防ぐことはできますか?

ターゲットlikeを使用してすべての識別子を印刷します(角かっこは単純なプレースホルダですが、キーワードから除外する必要があります)。

\textclassname{VoxelBuilder}

そして、キーワード(クラス、構造、公開...)と区切り記号(例: ":")を維持します。

明らかに、キーワード+区切り文字の反転パターンがより有利であるようですが、私は知りません。。私は本当に欲しい

X が次のいずれかでない場合にのみ、シーケンス X を \textclassname{X} に置き換えます。

  • class
  • struct
  • union
  • public
  • private
  • protected
  • virtual
  • :
  • ,
  • <
  • >

前のステップで中かっことセミコロンを削除しました。目標は

class \textclassname{VoxelbuilderAdda}:public \textclassname{VoxelBuilder}

継承権なし

class \textclassname{VoxelbuilderAdda}

not演算子を使用できる場合は、私が持っている演算子だけでなく、奇妙な多重継承も含めます。

ベストアンサー1

したがって、スペース、単語、コロンを別々に処理する必要があります。

sed -e 's/[A-Za-z]\{1,\}/[&]/g' -e 's/:/[&]/g' -e 's/ /[&]/g'

これは、a)1つ以上の文字が角括弧で囲まれたパターン\{1,\}で置き換えられ、bおよびc)角括弧で囲まれた単一のコロン(スペース)が置き換えられます。&

echo class VoxelbuilderAdda:public VoxelBuilder | sed -e 's/[A-Za-z]\{1,\}/[&]/g' -e 's/:/[&]/g' -e 's/ /[&]/g'
[class][ ][VoxelbuilderAdda][:][public][ ][VoxelBuilder]

おすすめ記事