ed 편집기에서 이 명령
/string.start/;/string.end/dp
,
및 사이의 모든 단어를 제거했습니다( 대신 사용하여 발생하는 전체 줄이 아님 ;
).string.start
string.end
string.start
와 사이에 대체/교체가 가능한가요 string.end
?
나는이 라인을 시도했다
s/string.start/;/string.end/mynewline../
이
/string.start/;/string.end/s /mynewline../
그러나 둘 다 옳지 않습니다.
내 목표는 명령으로 이와 같은 작업을 수행하는 것입니다.
/string.start/;/string.end/dp
텍스트:
This text start with string.start and other words bla bla bla bla then end with string end.
~이 되다
This text start with
나는 이런 것을 원한다
This text start with string.start and other words bla bla bla bla then end with string end.
~이 되다
This text start with my substituted string.
잊어버렸습니다: 한 줄은 사용하기 쉽기 때문에 대체는 다른 줄에 적용되어야 합니다.
s/stringstart.*.string.end/
답변1
표현식이 s/string.start/;/string.end/mynewline../
유효한 표현식이 아닌 것 같습니다 ed
. 내 시스템의 ed
GNU나 기본 BSD 모두 이를 이해하지 못합니다 . ed
나도 일하러 갈 수 없어 /string.start/;/string.end/dp
. "이 줄부터 문서 끝까지"와 ;
같은 주소인데 명령 줄 중간에 보면 이해가 안 되네요..,$
가장 간단한 해결책은 다음을 사용하는 것입니다.
s/string.start.*string.end/with my substituted string/p
string.start
이것은 실제로 당신이 원하는 것인데, 현재 줄에서 첫 번째 일치와 마지막 일치(일치하는 텍스트 포함) string.end
사이의 텍스트를 바꾸는 것입니다.
some.text(0) -> other.text(2)
이는 첫 번째 대괄호의 문자열을 다음으로 바꾸려는 것과 유사합니다 100
.
s/([^)]*)/(100)/
즉, 여는 구분 기호, 텍스트, 닫는 구분 기호를 일치시키고 원하는 텍스트로 바꿉니다(이 경우 구분 기호는 유지되어야 함).
교체를 적용하려면모두문서의 줄에서 명령 앞에 %
( 1,$
또는 그냥 ,
)을 추가합니다.
%s/string.start.*string.end/with my substituted string/p
마지막 줄만 인쇄됩니다.
영향을 받는 모든 행을 인쇄하려면 다음을 사용하십시오.
g/string.start.*string.end/ s//with my substituted string/p
즉, 해당 표현식과 일치하는 모든 줄에 개별적으로 대체가 적용됩니다.