指定したファイルの内容を以下のように変更したいと思います。私が提供したクラス名を除いて、 ".class"を含むすべての行をコメントアウトしたいと思います。
@MyClass1.MyClass2(value = {
Class1.class,
Class2.class,
Class3.class,
Class4.class
})
public class Foo {}
たとえば、Class2をパラメータとして指定した場合
sed -i -E 's/some_regex/Class2/g'
コマンドを実行すると、結果は次のようになります。
@MyClass1.MyClass2(value = {
//Class1.class,
Class2.class,
//Class3.class,
//Class4.class
})
public class Foo {}
これにはどの正規表現を使用する必要がありますか?
ベストアンサー1
次のファイルの場合:
$ cat file1
@MyClass1.MyClass2(value = {
Class1.class,
Class2.class,
Class3.class,
Class4.class
})
public class Foo {}
@MyClass11.MyClass2(value = {
Class1.class,
Class2.class,
Class3.class,
Class4.class
})
public class Foo2 {}
次のような結果が得られます。
$ sed '/@MyClass1.MyClass2(*/,/})/{s|\sClass.*|//&|g; /Class2/{s|//||}}' file1
@MyClass1.MyClass2(value = {
// Class1.class,
Class2.class,
// Class3.class,
// Class4.class
})
public class Foo {}
@MyClass11.MyClass2(value = {
Class1.class,
Class2.class,
Class3.class,
Class4.class
})
public class Foo2 {}
説明する:
'/@MyClass1.MyClass2(*/,/})/ {....}
--> テーブルの作業範囲/from/,/to/{actions}
{s|\sClass.*|//&|g;
-->//
スペースで始まるすべての行に適用されます\s
。Class
/Class2/{s|//||}
-->//
削除Class2
s/replacethis/withthat/
ヒント:sedでは、すべての文字を構文区切り文字として使用できます。
私は|
脱出を選ぶ//