파일의 10~20행 시작 부분에 ed
put 문자를 사용합니다 . 해결책은 다음과 같습니다#
/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