Ed: 한 문자열과 다른 문자열을 바꾸는 것이 가능합니까?

Ed: 한 문자열과 다른 문자열을 바꾸는 것이 가능합니까?

ed 편집기에서 이 명령

/string.start/;/string.end/dp

,및 사이의 모든 단어를 제거했습니다( 대신 사용하여 발생하는 전체 줄이 아님 ;).string.startstring.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. 내 시스템의 edGNU나 기본 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

즉, 해당 표현식과 일치하는 모든 줄에 개별적으로 대체가 적용됩니다.

관련 정보