ed [duplicate]에서 <<\END를 사용하는 이유

ed [duplicate]에서 <<\END를 사용하는 이유

파일의 10~20행 시작 부분에 edput 문자를 사용합니다 . 해결책은 다음과 같습니다#/etc/passwd

ed /etc/passwd <<\END
10,20s/^/#/
%p
Q
END

내 질문은 <<여기와 \이전 의 의미가 무엇 END이며 우리가 그것을 사용하는 이유는 무엇입니까? 우리는 그것을 항상 사용해야 하나요?

답변1

당신이 보여준 것은 ed편집 스크립트와 함께 작동합니다.

편집 스크립트(일련의 명령)가 ed여기에 문서로 전달됩니다. ed여기 문서는 여러 줄로 구성된 텍스트입니다.리디렉션유틸리티의 표준 입력을 입력합니다. 여기 문서는 END첫 번째 태그와 마지막 태그 사이에 있는 것입니다. \앞에 있는 첫 번째 토큰은 END문서가 참조된다는 것을 의미하며, 이는 쉘이 문서에서 변수 등을 확장하려고 시도하지 않음을 의미합니다. 로 쓸 수도 있습니다 <<'END'. 이 특별한 경우에는 \편집 스크립트에 셸 확장을 위한 내용이 포함되어 있지 않기 때문에 제거가 가능합니다.

ed이는 보다 간단한 비대화형 편집을 위한 일반적인 방법이지만 ed이 방식으로 사용할 경우 해당 옵션과 함께 사용해야 합니다.-s

이 명령의 효과는 다음 sed과 함께 사용하는 것과 동일합니다.

sed '10,20/^/#/' /etc/passwd

( ed스크립트는 파일을 변경한 다음 종료하기 전에 터미널에 파일을 표시합니다.아니요변경 사항을 저장합니다. 이는 sed위 스크립트가 한 줄씩 수행하는 작업과 비슷합니다.


이것은아니요그래도 파일을 편집하는 좋은 방법입니다 /etc/passwd( ed다행히 스크립트는 변경 사항을 저장하지 않기 때문에 실제로 그렇게 하지 않습니다). 이렇게 하려면 vipw이 파일을 수정하기 위한 도구나 특정 명령(예: 등)을 사용해야 합니다 . useradd이는 많은 Unix 시스템에서 파일을 하나 이상의 다른 파일이나 데이터베이스와 동기화해야 하고, 편집하려면 해당 파일을 업데이트(예: vipw자동 업데이트)해야 하기 때문입니다.

답변2

그것은 아닙니다 ed. 그것은 당신의 껍질입니다.

이는 원시 입력을 단어까지 가져와서 명령 END으로 보내는 것을 의미합니다.STDIN

예를 들어:

$ cat <<\END
> something
> END
something

다음과 같은 결과가 생성됩니다.

$ echo something | cat
something

관련 정보