1行のsedコマンドを使用して行末に置き換えて追加します。

1行のsedコマンドを使用して行末に置き換えて追加します。

次の行があります

 // Testing this

sedコマンドを使用して、各行の//を/ *(中間の文または単語)* /に置き換えようとします。

だから、次のようにする必要があります

/* Testing this */

最初の部分は呼びやすいです。

sed 's#//#/*#'

しかし、2番目の部分ではこのソリューションを試しました。

sed を使用して行末に単語を追加する

この機能を使用しようとすると、-e「終了していないコマンド」エラーが発生しました。その後、セミコロンを使用して1つにしようとしました。

's#//#/*#;#//#s#/$#*/#'

//ただし、これは最初の部分(aで置き換え/*)のみが行われ、2番目の部分(aを*/同じ行の末尾に配置)ではないようです。

私は何が間違っていましたか?どんなアドバイスも本当にありがとうございます。

答え1

どうですか?

$ cat testfile
// Testing this
foobar
$ sed 'sx//\(.*\)x/*\1 */x' testfile
/* Testing this */
foobar
$
  • sx//: 以下を含む行の検索//
  • \(.*\)x: 行の残りの部分をキャプチャグループ 1 に入れます。
  • /*\1 */x:行の残りの部分を/*(コメントの始まり、Cスタイル)に置き換え、キャプチャグループ1の内容(で参照\1)、それから*/(コメントの終わり、Cスタイル)に置き換えます。

答え2

別のアプローチ:コメントと正確に一致する条件で検索と置換を実行します。

sed '\!//! {s!!/*!; s!$! */!}' file

内容は次のとおりです。

  • 行にパターンが含まれている//場合
    • 一致するテキストを次に置き換えます。/*
    • 次に、行末の空の文字列を次に置き換えます。*/

関連情報