줄이 많은 파일이 있습니다.
일부 줄은 일치하지 않는 중괄호로 끝납니다(예: " }
" ).
이는 다음을 포함하는 줄에서만 작동합니다.".to"
sed를 사용 하여 문자열(" ")을 포함하지만 줄의 어느 위치(앞이나 뒤)에 다른 문자열(" ")이 없고 " "로 끝나는 .to
모든 줄에서 일치하지 않는 중괄호를 제거하려면 어떻게 해야 합니까?{
.to
}
그것은 마치sed -i '/\.to/s/[[:space:]]*\}//' file
그러나 이는 문자열(" .to
")을 포함하고 }
" "로 끝나는 모든 줄에 적용됩니다.
{
다음 과 같이 중괄호/대괄호 없이 줄에서 작동하길 원합니다.}
이를 위해 여러 줄 중괄호에 대해 걱정할 필요가 없습니다. 검색어와 일치하는 행(이 경우 ".to")을 제한하면 이를 방지하는 데 도움이 됩니다.
예를 들어
expect(:size).to eq 2 }
expect(:first).to be_persisted }
expect("first.number_field").to eq 10 }
expect(:last).to be_persisted }
expect("last.number_field").to eq 10 }
this remains unchanged }
this {remains} unchanged }
this {
is ok }
=>
expect(:size).to eq 2
expect(:first).to be_persisted
expect("first.number_field").to eq 10
expect(:last).to be_persisted
expect("last.number_field").to eq 10
this remains unchanged }
this {remains} unchanged }
this {
is ok }
답변1
그리고진주그리고고급 정규식 살펴보기:
perl -lpe 's/((?<!\{).*?\.to.*)}\s*$/$1/' file
그리고앗:
awk '!/{/ && /\.to.*}/{sub(/\}/, "", $NF)}1' file
답변2
좀 더 간단한 건 어때요?
sed -i 's@^\([^{]\+\)\(\.to[^{]\+\)}\s*$@\1\2@' your_file
Perl 사용(더 나은 가독성을 위해):
perl -pi -e 's@
^ # start of line
( [^{]+ ) # at least one non-{ character (save in $1)
(\.to [^{]+ ) # .to and at least one non-{ (save in $2)
} # that pesky }
\s* # optional white space
$ # end of line
@$1$2@x' your_file