나는 현재 한 가지를 제외하고는 잘 작동하는 sed 세트를 가지고 있습니다.
내가 문제를 겪고 있는 구체적인 표현은 다음과 같습니다.
sed -i '/[^}.to]\.to[[:space:]]/ s/\(\S\)/expect(\1/' ../_spec_seded/"$file"
이제 잘 작동합니다. 기본적으로 표현식의 시작 부분을
찾아 삽입합니다. 특히, 작동하는 일치 항목을 찾을 때 제외됩니다 ..to
expect
}.to
.to
이제 검색 일치 항목에서 "이것" 또는 "저것"도 제외하고 싶습니다. 나로서는}.to
또는 end.to
즉, 대신에
/[^}.to]\.to[[:space]]/
나는 다음을 가져야 한다:
/[^}.to|^end\.to]\.to[[:space]]/
/[^}.to][^end\.to]\.to[[:space]]/
/[(^}.to|end\.to)]\.to[[:space]]/
/[^(}.to|end\.to)]\.to[[:space]]/
이렇게 사용하면 대괄호를 탈출해야 합니까?
/[^\(}.to|end\.to\)]\.to[[:space]]/
그것도 |
?
/[^\(}.to\|end\.to\)]\.to[[:space]]/
게임을 작동시키려고 합니다.
stuff.to do thing
stuff).to do thing
this.to that
all.all.all.to do
pretend.do # Note this edge case! (pretend contains "end"!)
하지만
this will be here }.to do
last.end}.to do
all.this at the end.to
none at allend.to
그리고
all.this at the
end.to # i.e. no spaces before as it is the start of the line.
일반적으로 (모든 언어) 부정에 OR을 사용하는 것은 까다로워 보입니다(오탐으로 인해).
답변1
이 질문에 대한 내 의견에 대한 귀하의 답변을 기다리고 있습니다. 내 답변은 다음과 같습니다.
첫째,
[^}.to]
원하는 일을 하지 않는다. 그럴 것이다아니요패턴이 없는 행과 일치합니다}.to
. 어떤 것과도 일치한다특징.
,}
,t
또는 제외o
. 다시 말해서,많은철사.일을 더 쉽게 하기 위해 기본적으로
sed
아무것도 인쇄하지 않고 모든 것을 인쇄하도록 지시합니다.와는 별개로제외하려는 패턴과 일치하는 행은 다음과 같습니다.sed -n '/\(\bend\|}\.to\)/!p' your_file
end.to
그러면 단어 경계 내에 포함되지 않은 (예: allend.to
계산되지 않음) 또는 }.to
.
또한 일치하는 줄만 인쇄하려면 \.foo[[:space:]]
원하지 않는 패턴과 일치하는 줄을 제거하고 조건부 인쇄를 추가하세요.
sed -n '/\(\bend\|}\.to\)/d;/\.to[[:space:]]/p' your_file
물론 일치와 인쇄 사이에 원하는 대체 항목을 적용할 수 있습니다.
sed -n '/\(\bend\|}\.to\)/d;/\.to[[:space:]]/s/foo/bar/g;p' your_file
답변2
대부분의 경우 이것이 작동하는 것 같습니다.
앞으로:
sed -i 's/[^}.to].to[[:space:]]/).to /' ../_spec_seded/"$file"
뒤쪽에:
sed -i 's/[^}.to|end.to].to[[:space:]]/).to /' ../_spec_seded/"$file"