파일의 두 태그 사이에 있는 텍스트를 다른 파일의 텍스트로 바꾸는 방법은 무엇입니까?

파일의 두 태그 사이에 있는 텍스트를 다른 파일의 텍스트로 바꾸는 방법은 무엇입니까?

텍스트가 있다고 가정 해 보겠습니다 ~/.bashrc.

#~/.bashrc
# ...some commands...

# aliases
alias suicide='sudo rm -rf /'
# end aliases

# other commands

이 텍스트 블록을 다른 파일의 두 태그 사이에 포함된 다른 텍스트로 바꾸고 싶습니다.stuff-to-place-in-bashrc.txt

# stuff-to-place-in-bashrc.txt
# ...stuff...

# aliases
alias ldir='ls * -d'
alias ithinklifeisworthliving='echo all good'
# end aliases

# ...more stuff...

나는 노력했다

 sed -ne 's/# aliases\s+\(.*\)\s+# end aliases/\1/' stuff-to-place-in-bashrc.txt

그러나 나는 말 그대로 어둠 속에서 흔들리고 있었습니다. 누구든지 나를 도와줄 수 있나요?

  1. 그것에서 텍스트를 추출하는 방법은 무엇입니까 stuff-to-place-in-bashrc.txt?

  2. ~/.bashrc질문 1에서 추출한 텍스트로 다른 부분을 어떻게 바꿀 수 있나요 ?

편집하다

업데이트해 주셔서 감사합니다. 제가 왜 이런 것을 원하는지 궁금해하시는 분들을 위해:

사용자가 추가한 콘텐츠를 덮어쓰지 않고도 스크립트 파일에 대해 신중하게 선택한 업데이트를 허용합니다. 공유되고 자주 업데이트되는 표준 운영 환경에 유용합니다(예:초보자XP로 코딩).

미친놈들아.

답변1

Ed는 이전에 테스트한 것처럼 ed 스크립트를 개발하고 대화형으로 작업을 수행하는 데 사용할 수 있다는 점에서 표준 편집기입니다. 작은 파일(예: .bashrc코드 텍스트)의 경우 전체 파일을 한 번에 읽고 버퍼를 사용하므로 ed의 성능이 높습니다. 같은 이유로 로그 파일과 같은 대용량 파일에는 ed를 사용하면 안 됩니다.

하지만 ed 스크립트를 사용하면 작업을 즉시 완료할 수 있습니다.

ed ~/.bashrc<<EOF
/^# aliases
+,/^# end aliases/-1d
-r !sed -n '/^# aliases/,/^# end aliases/p' stuff-to-place-in-bashrc.txt|grep -v '^#'
w
q
EOF

비슷한 스크립트를 사용하여 내 노트북이 있는 다양한 환경에 맞게 .asoundrc와 같은 구성 파일을 자동으로 조정합니다.

ed에 대한 최고의 문서는 매우 멋지고 간단한 매뉴얼 페이지에서 나옵니다.계획 9체계. 나는 그것을 다음과 같이 번역한다.ed.ps포스트스크립트 파일. 당신이 관심이 있다면계획 9당신은 그것을 확인해야합니다9개의 전선그리고http://cat-v.org/원래 Bell Labs 버전이 아직 남아 있지만 파일 시스템이 매우 간단하기 때문입니다.

편집기 전쟁, emacs, vim 등에 대한 마지막 말:궁극적인 규칙!

답변2

set /^\#aliases/  /^\#end\ aliases/
sed -ne"$1,$2"'s/\\\{0,1\}/&&/gp' <stuff_to_place...rc |
sed -e"$1,$2c\" -f- ./infile >./outfile

ed파일을 그 자리에서 편집하려면 다음과 같습니다.매우좋은 솔루션입니다. 스트림에서 편집하려면 sed.Avoid 를 사용하세요 sed -i.

답변3

물론 ed추가 도구 없이 혼자서도 이 작업을 수행할 수 있습니다.

ed -s stuff_to_place.txt<<\IN
1,/# aliases/d
/# end aliases/,$d
,d
.r /home/username/.bashrc
/# aliases/x
.t.
.,/# end aliases/-d
,p
q
IN

결과가 만족스러우면 ,p로 바꿔 w /home/username/.bashrc변경 사항을 작성합니다( ~/.bashrc및 와 함께 사용된 전체 경로를 참고하세요. 에 있는 경우 간단히 을 사용할 수 있습니다). 작동 방식: 먼저 원하지 않는 행을 제거합니다. 그런 다음 를 사용하여 나머지(별칭)를 삭제합니다. 이제 텍스트 버퍼는 비어 있고 잘라내기 버퍼에는 우리가 원하는 줄이 포함되어 있습니다. 그런 다음 텍스트 버퍼에 내용을 쓰고, 줄 뒤에 잘라낸 버퍼()의 내용을 넣고, 붙여넣은 마지막 줄을 복사한 다음(), 복사된 줄에서 마지막 린트 또는 변경 사항을 포함하지 않고 제거합니다. 그리고 어.rw.bashrccwd
dstuff_to_place.txt,dr.bashrcx/# aliases/.t./# end aliases/pwq

관련 정보