2017-09-21 15 views
0

文字列の末尾に - の文字列を見つけ、strlcpy関数で始まる行の追加パラメータに置き換えます。VIMの検索と置換 - 参照

入力

strlcpy(p->account,gettoken(NULL,&plast));  //Set Account Information 
strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0')); /* YYYYMMDD */ 
strlcpy(p->status,gettoken(NULL,&plast)); 

予想される出力(最初のパラメータすなわちp->accountをコピーして置き換える);sizeof(p->account));

strlcpy(p->account,gettoken(NULL,&plast),sizeof(p->account));  //Set Account Information 
strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0'),sizeof(p->startDate)); /* YYYYMMDD */ 
strlcpy(p->status,gettoken(NULL,&plast),sizeof(p->status)); 

例:検索と置き換えコマンドを次に示します。); sizeof()への引数としてp->balanceを渡す方法

strlcpy(p->balance,getInfo(NULL,&account),sizeof()); 

:g/strlcpy(/s/);/,sizeof());/g 

最も早い返答を心から感謝します。

答えて

1

:%s/strlcpy(\(.\{-}\),.*\zs);/, sizeof(\1));

が分解されているものである:すべての行について

  • %
  • s代替
  • は、検索パターンを開始/
  • strlcpy(試合strlcpy(
  • 非貪欲乗算\{-}
  • \)
  • 仕上げ一致基コンマと一致
  • ,力を用いて後
  • .\{-}一致にすべての文字を使用するようにコンテンツをキャプチャするための一致グループを開始\(。非貪欲\{-}と組み合わせることで、これは
  • \zsはこの時点
  • );試合);
  • /置換を開始した後、代替開始を作る
  • .*試合のすべての文字最初のカンマの前まで選択する効果を持っていますコマンドの一部
  • , sizeof(代用後\zs, sizeof(
  • \1));
で置換を完了し、交換
  • ));で前回のマッチグループの内容を使用
  • 1

    入力:

    strlcpy(p->account,gettoken(NULL,&plast));  //Set Account Information 
    strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0')); /* YYYYMMDD */ 
    strlcpy(p->status,gettoken(NULL,&plast)); 
    

    コマンド:

    :%s/\(strlcpy(p->\)\([0-9A-Za-z]*\)\(\,.*))\)/\1\2\3,sizeof(p->\2))/g 
    

    出力:

    strlcpy(p->account,gettoken(NULL,&plast)),sizeof(p->account));  //Set Account Information 
    strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0')),sizeof(p->startDate)); /* YYYYMMDD */ 
    strlcpy(p->status,gettoken(NULL,&plast)),sizeof(p->status)); 
    

    注:

    コマンドはvimの中で実行されました!ここで