sed/awk コマンドの正規表現

sed/awk コマンドの正規表現

指定したファイルの内容を以下のように変更したいと思います。私が提供したクラス名を除いて、 ".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; -->//スペースで始まるすべての行に適用されます\sClass

/Class2/{s|//||} -->//削除Class2

s/replacethis/withthat/ヒント:sedでは、すべての文字を構文区切り文字として使用できます。
私は|脱出を選ぶ//

おすすめ記事