지정한 파일의 내용을 아래와 같이 변경하고 싶습니다. 내가 제공한 클래스 이름을 제외하고 ".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에서는 모든 문자를 구문 구분 기호 로 사용할 수 있습니다 .
나는 |
탈출을 선택한다//
답변2
awk '/\.class/ && !/Class2/ {print "//", $0}
!(/\.class/ && !/Class2/) {print $0}' filename