다음과 같은 파일이 있습니다.
class SomeClass
extends anotherClass
with moreClassA
with moreClassB {
//do some crazy stuff
}
다음과 같은 클래스를 하나 더 추가하고 싶습니다.
class SomeClass
extends anotherClass
with moreClassA
with moreClassB
with oneMoreClassIwant {
//do some crazy stuff
}
나는 다음과 같이 대체를 수행하기 위해 sed를 사용해 보았습니다.
sed -E "s/(Class SomeClass[A-Za-z \n]+)\\{/\1with OneMoreClassIWant/" tmp.scala
하지만 여러 줄 일치에서는 작동하지 않습니다.
나는 또한 예를 들었다.이 게시물하지만 내 상황에 적응하지 못했습니다.
답변1
awk를 사용하십시오.
$ cat tst.awk
{ rec = rec $0 RS }
END {
old = \
"class SomeClass" RS\
" extends anotherClass" RS\
" with moreClassA" RS\
" with moreClassB {" RS\
" //do some crazy stuff" RS\
"}"
new = \
"class SomeClass" RS\
" extends anotherClass" RS\
" with moreClassA" RS\
" with moreClassB" RS\
" with oneMoreClassIwant {" RS\
" //do some crazy stuff" RS\
"}"
if ( s = index(rec,old) ) {
rec = substr(rec,1,s-1) new substr(rec,s+length(old))
}
printf "%s", rec
}
$ awk -f tst.awk file
class SomeClass
extends anotherClass
with moreClassA
with moreClassB
with oneMoreClassIwant {
//do some crazy stuff
}
답변2
이것은 작동하는 것 같습니다:
xargs -0 < data | sed -z 's/\(class.*\){/\1\n with anotherMoreClass {/'
또는
tr '\n' '\0' < data | sed 's/\(class.*\){/\1\n with anotherMoreClass {/' | tr '\0' '\n'
이 섹션에서 클래스 이름( SomeClass
귀하의 경우) 을 \(class.*\)
다음과 같이 지정할 수 있습니다.
xargs -0 < data |\
sed -z 's/\(class[[:blank:]]\{1,\}SomeClass.*\){/\1\n with anotherMoreClass {/'
또는
tr '\n' '\0' < data |\
sed 's/\(class[[:blank:]]\{1,\}SomeClass.*\){/\1\n with anotherMoreClass {/' |\
tr '\0' '\n'