
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]
答え2
このタイプの変換には特別な解析ツールを使用する方が良いですが、ファイルをテキストのように操作するには、次のようにします。
sed 's/\(::\|[<, ]\)\(\w\+\)/\1\\textclassname{\2}/g' filename
または、追加のエスケープを防ぐには、-rオプションを使用します。
sed -r 's/(::|[<, ])(\w+)/\1\\textclassname{\2}/g' filename