Linux 명령 및 셸 기술
sed: 편집기를 열지 않고 스트림 편집
sed는 옆으로 편집합니다. 전체 텍스트 스트림이 이를 통과하고 변환되어 나오며 편집기가 열리지 않습니다. 그 평판은 한 줄 대체를 수천 개의 파일에 대한 일괄 작업으로 바꾸는 -i와 백업 접미사 없이 이를 실행한 관리자의 재난 이야기에서 비롯됩니다. 안전한 작업 흐름은 절대 변경되지 않습니다. 대체 항목을 표시하고 출력을 확인한 다음 접미사와 함께 -i를 추가하고 종료 코드를 유지합니다.
핵심 내용
- 커밋하기 전에 미리보기: sed -n '10,20p' 파일은 줄 범위를 표시하고 동일한 -n + p 조합은 정규식 또는 주소와 일치하는 줄만 인쇄합니다.
- 의미하는 바를 수행하는 플래그로 대체하십시오. 모든 일치 항목에는 s/old/new/g, 두 번째 일치 항목에는 2g와 같은 숫자, 백슬래시 이스케이프 페이지가 없는 확장 정규식에는 -E를 사용하세요.
- 내부 편집에는 접미사가 붙으며 예외는 없습니다. sed -i.bak 's/http:/https:/g' 앱은 모든 변경 사항 옆에 동일한 이름의 백업을 유지합니다. 그 접미사는 어떤 편집자의 실행 취소 기록보다 더 많은 배포를 구해냈습니다.
- 구분 기호는 무료입니다. s|/var/www|/srv/app|g(또는 s#...#g)는 패턴이 경로로 가득 차 있을 때 슬래시 이스케이프 싸움을 방지합니다.
- -i는 원자적이지 않습니다. 배치 중간에 충돌이나 잘못된 정규식으로 인해 절반만 다시 작성된 파일이 남아 있으므로 대량 작업은 복사본이나 git 추적 트리에 대해 실행되며 유일한 복사본이 아닙니다.
- GNU와 BSD sed는 -i에 동의하지 않습니다. BSD에는 스크립트 앞에 접미사가 필요합니다(sed -i ''는 macOS에서 작동하며 Linux 구문이 아닙니다). 이는 이식성 스크립트가 -i를 완전히 피하는 또 하나의 이유입니다.
- 삭제 및 격리는 정직한 동사입니다. 'd'는 일치하는 줄을 제거하고(sed '/^#/d' 주석은 제거) 범위를 사용하는 -n은 섹션을 분리합니다. 둘 다 영리한 대체보다 더 잘 읽혀집니다.
- 한 줄 편집, 리터럴 여러 줄 블록 또는 상태 저장 조인 이후의 모든 내용은 awk 또는 실제 스크립트에 속합니다. sed에게 프로그래머 작업을 하도록 강요하는 것은 읽을 수 없는 한 줄짜리 코드가 탄생하는 방식입니다.
현장 노트
.bak 접미사가 없는 첫 번째 sed -i는 오후 트래픽 피크 직전에 프로덕션 nginx 구성에 도달했습니다. 그 이후로 모든 내부 편집에는 백업 접미사가 포함되어 있으며 -i가 명령 근처에 가기 전에 테스트 실행 출력을 읽었습니다.
자주 묻는 질문
다른 것과 일치하는 줄만 편집하려면 어떻게 해야 합니까?
문제를 해결하세요: sed '/cache/s/true/false/'는 캐시 라인에서만 true를 false로 바꾸고 '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g'와 같은 범위는 블록을 편집합니다. 주소가 먼저 오고 명령이 두 번째로 옵니다.
sed가 Windows 편집 파일의 줄 끝과 일치하지 않는 이유는 무엇입니까?
해당 행은 '$' 앵커가 예상하지 않는 캐리지 리턴 문자로 끝납니다. 먼저 tr로 제거하거나 도중에 정규화하면 여러 줄 콘텐츠가 여전히 -0777을 사용하여 awk 또는 Perl에 속합니다.
간단한 교체를 위해 sed가 awk보다 더 빠릅니까?
미미하고 관련성이 없습니다. 둘 다 구성 크기 파일에서 밀리초 안에 완료됩니다. 동료가 6개월 안에 한 줄짜리 내용을 풀어야 하기 때문에 가독성을 기준으로 선택하세요.
sed를 사용하여 전체 구성 블록을 삽입할 수 있나요?
예: 'a'는 뒤에 추가되고 'i'는 앞에 삽입되며 'c'는 줄을 대체하지만 삽입된 텍스트를 단순하고 단일 목적으로 유지합니다. 실제 블록은 템플릿 파일이나 적절한 프로비저닝 단계에 속합니다.
linux 명령 및 셸 기술에 대한 Kinetikatech의 지원
저희는 이것을 수백 번 처리했습니다: 관리자가 서버를 운영할지 아니면 싸울지 결정하는 명령 및 스크립팅 습관: 모든 기본 설치에 포함된 도구를 사용하여 텍스트와 프로세스를 검색, 변환, 전송 및 감독합니다. Linux 서버 보안 및 서버 관리와 함께하면 평가, 구현, 24시간 연중무휴 모니터링, 그리고 중요한 때에 30분 이내 대응이라는 완전한 사이클을 제공합니다.