>  기사  >  시스템 튜토리얼  >  종합 요약: Linux sed 다중 라인 처리에 대한 자세한 설명

종합 요약: Linux sed 다중 라인 처리에 대한 자세한 설명

WBOY
WBOY앞으로
2024-01-05 16:11:491057검색

일반적인 상황에서 sed는 처리할 라인을 패턴 공간으로 읽고 스크립트의 명령은 스크립트가 실행될 때까지 라인을 차례로 처리한 다음 해당 라인이 출력되고 패턴 공간이 비어 있다가 반복됩니다. 지금의 작업을 사용하면 파일이 완전히 처리될 때까지 파일의 새 줄을 읽습니다. 그러나 사용자가 스크립트의 특정 명령이 특정 조건에서 실행되기를 바라거나 다음 처리를 위해 패턴 공간이 유지되기를 바라는 등의 다양한 이유로 인해 sed가 파일을 처리할 때 지침을 따르지 않을 수 있습니다. 정상적인 과정을 벗어났습니다. 현재 sed는 사용자 요구 사항을 충족하기 위해 몇 가지 고급 명령을 설정했습니다. sed의 고급 명령을 배우고 싶다면 먼저 다음 두 가지 캐시 영역을 이해해야 합니다.

1. 패턴 공간의 정의: 패턴 공간은 sed가 입력 끝에서 방금 읽은 내용을 저장하는 버퍼 영역입니다.
2. 홀드 공간의 정의: 홀드 공간은 패턴 공간 데이터 처리 시 데이터를 임시로 캐시하기 위해 사용됩니다.

다음과 같은 여러 명령 매개변수도 있습니다.

g: 홀드 공간의 콘텐츠를 패턴 공간으로 복사하고, 패턴 공간의 원본 콘텐츠를 지웁니다
G: 홀드 공간의 내용을 패턴 스페이스에 추가하세요
h: 패턴 공간의 콘텐츠를 홀드 공간으로 복사하고, 원래 홀드 공간의 콘텐츠는 삭제됩니다
H: 패턴 공간의 내용을 고정 공간에 추가합니다
x: 패턴 공간과 홀드 공간의 내용을 교환

예를 들어, 파일 내용을 반전시키려고 합니다.

으아아아

다음 명령을 실행하세요:

으아아아

위의 실행 과정을 점차적으로 이해해 봅시다

1 다음 세 가지 명령을 분석해 보겠습니다.

  • 2,$G: 두 번째 줄부터 마지막 ​​줄까지 G 명령을 실행
  • h: h 명령 실행
  • $!d: 마지막 줄을 제외한 모든 줄 삭제

2. 특정 작업

  1. 첫 번째 줄까지 스캔
    1. 이때 패턴 공간에 1줄을 넣으면 패턴 공간은 여전히 ​​1줄입니다.
    2. h 명령을 직접 실행하면 임시 저장 공간은 1줄입니다.
    3. d 명령을 실행하여 패턴 공간에서 유일한 데이터 행을 삭제합니다. 삭제 후 패턴 공간은 비어 있습니다
  2. 두 번째 줄까지 스캔
    1. 패턴 공간에 2줄 넣기
    2. G 명령을 실행하여 패턴 공간의 2라인 뒤에 임시 공간의 1라인을 추가합니다. 이때 패턴 공간은 2-linen1-line입니다.
    3. h 명령을 실행하면 임시 저장 공간의 내용은 2-linen1-line입니다.
    4. d 명령을 실행하면 패턴 공간이 지워집니다
  3. 세 번째 줄까지 스캔
    1. 패턴 공간에 3줄을 넣고,
    2. G 명령을 실행하여 패턴 공간의 3줄 뒤에 임시 공간의 2-linen1-line을 추가합니다. 이때 패턴 공간은 3-linen2-linen1-line입니다.
    3. h 명령을 실행하면 임시 저장 공간의 내용은 3-linen2-linen1-line입니다.
    4. $!d를 실행하지 마세요;
    5. 다이렉트 출력 3-linen2-linen1-line
  4. 물론 sed '1!G;h;$!d' tmp 명령을 사용해도 이 효과를 낼 수 있습니다.

위 내용은 종합 요약: Linux sed 다중 라인 처리에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제