入力する:
int foo(int a, void * b, int c);
出力:
int foo(int, void *, int);
一致させるパターンとして「、」を使いたい。 「、」パターンが一致すると、前の単語(例a
:b
&)を削除しますc
。
答え1
使用できる視野(時々呼ばれる。長さ0の主張)使用中の正規表現エンジンがそれをサポートしている場合(たとえば、Perlを使用)、次のものがある場合にのみゼロ以外の単語文字シーケンスを一致させて削除します。,
perl -pe 's/\w+(?=,)//g'
終了閉じ括弧など、アサーションに他の文字を含めるには、文字を文字リストの一部として追加できます)
。int c
[...]
perl -pe 's/\w+(?=[,)])//g'
先行スペースも削除するには、次のようにします。
perl -pe 's/\s*\w+(?=[,)])//g'
それらを合わせると、我々は得る。
$ echo 'int foo(int a, void * b, int c);' | perl -pe 's/\s*\w+(?=[,)])//g'
int foo(int, void *, int);
-i
最新バージョンのsedと同様に、Perlもコマンドラインスイッチを追加してファイルを機能させることができます。
答え2
これは役に立ちます:
sed -e 's/[^ ]\+\([,)]\)/\1/g'
この見苦しいスペースを取り除くには:
sed -e 's/ [^ ]\+\([,)]\)/\1/g'