シェルスクリプトからパターンマッチングの前に単語を1つだけ削除する

シェルスクリプトからパターンマッチングの前に単語を1つだけ削除する

入力する:

 int foo(int a, void * b, int c);

出力:

 int foo(int, void *, int);

一致させるパターンとして「、」を使いたい。 「、」パターンが一致すると、前の単語(例ab&)を削除します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もコマンドラインスイッチを追加してファイルを機能させることができます。

おすすめ記事