4

フォーマットされたソース コード (C) があり、関数呼び出しの途中で改行が追加されます。たとえば、私は持っています

CALL_A( par1, par2, 12345);

そして私が持っている他の場所

CALL_A(par1, par2
      ,12345);

関数の 3 番目のパラメーターとして渡される数値を見つける必要があります。この sed コマンドを使用して改行を削除しましたが、一致しません:

cat source.c | sed -e ':a; /CALL_A*$/ { N; s/$//; ba; }'

関数呼び出しの途中で改行を取り除く方法について何か提案はありますか?

4

1 に答える 1

2

次のことを試してください。

sed -e ':a; /CALL_A[^)]*$/{N; s/\n *//; ba}'

現在のバージョンは次の理由で動作しません:

  • /CALL_A*$/呼び出しと一致しません*。in regex は前の要素を繰り返すため、で終わる行を探してCALL_から、任意の数のA. これを に変更して、 以外の任意の数の文字が続く/CALL_A[^)]*$/行に一致するようにしました。これにより、1 行に呼び出しがある行には一致しなくなります。CALL_A)
  • s/$//何もしません$。行末に一致しますが、改行文字には一致しないため、置き換えても何の役にも立ちません。代わりにs/\n *//、次の行から改行文字と先頭のスペースを削除する を使用しました。
于 2013-07-18T00:27:56.513 に答える