sed コマンドで // を /* */ に置き換える方法は?
私は試した:
sed -e "s/////* *//g" <<< filename
ただし、これにより、代替コマンド「/」にエラーフラグが発生します。
この問題を解決する方法を知っている人はいますか?
答え1
$ echo '// //' | sed 's@//@/* */@g'
/* */ /* */
引用元man sed
:
[2addr]s/regex/交換/フラグ
置換文字列をパターン空間の正規表現の最初のインスタンスに置き換えます。REと置換を区別するために、スラッシュの代わりにバックスラッシュまたは改行以外のすべての文字を使用できます。。 REと置換では、RE区切り記号の前にバックスラッシュがある場合は、リテラル文字として使用できます。
答え2
sedでは、どの文字も区切り文字として使用する必要はありません/
。使用:
sed 's://:/* */:g' < file
// comment
更新された質問に対してインラインコメントをブロックコメントに置き換えるには、/* comment */
次のコマンドを使用します。
sed -E 's://(.*):/*\1*/:g' < file
括弧はキャプチャグループを定義し、その後に参照が続きます\1
。
ただし、これは行単位でのみ機能するため、連続したコメント行をマージするには、sedよりも優れたパーサーが必要になる場合があります。
また、これは単純な場合には機能しますが、一部の入力では機能することがあります。次のコードで何が起こるかを考えてみましょう。
char *url = "https://example.com";
そのため、変換後にファイルを注意深く確認してください。