답변1
이렇게 하면 파일이 한 줄씩 반전됩니다.
sed '1!G;h;$!d'문서
sed
첫째 ,예비 공간그리고패턴 공간. 특정 명령에 초점을 맞추기 전에 먼저 두 명령을 구별해야 합니다.
새 줄을 읽으면 sed
패턴 공간에 로드됩니다. 따라서 새 줄이 처리될 때마다 해당 공간을 덮어쓰게 됩니다. 반면에 예약된 공간은 처리 전반에 걸쳐 일관되며 나중에 사용하기 위해 값을 저장할 수 있습니다.
명령에 :
1!G
이 명령문에는 , h
및 3개의 명령이 있습니다.$!d
1!G
G
이는 명령이 첫 번째 줄(음수!
) 을 제외한 모든 줄에서 실행된다는 의미입니다1
.G
인용하다추가의예약된 공간의 내용을 패턴 공간에 넣습니다.h
모든 행에 적용됩니다. 그것복사공간을 예약된 공간으로 패턴화하고 덮어씁니다.$!d
마지막 줄을 제외한 모든 줄에 적용됩니다($
마지막 줄을 의미하며!
이를 무효화함).d
라인(패턴 공간)을 뚫고 지나가라는 명령입니다.
- 이제 첫 번째 줄을 읽으면 명령이
sed
실행됩니다h
. 첫 번째 행은 예약된 공간에 복사됩니다. 그런 다음$!
기준을 충족했기 때문에 제거되었습니다 .sed
두 번째 줄로 계속하세요. - 두 번째 줄은 조건과 일치하므로
1!
(첫 번째 줄이 아님) 예약된 공간(첫 번째 줄이 있음)이 패턴 공간(두 번째 줄이 있음)에 추가됩니다. 그 후, 패턴 공간에는 이제 두 번째 줄이 있고 그 뒤에 첫 번째 줄이 있으며 개행 문자로 구분됩니다. 이제h
명령이 적용됩니다(모든 행에서와 같이). 패턴 공간의 모든 내용이 예약된 공간에 복사됩니다. 세 번째 설명($!d
)이 적용됩니다. 행이 패턴 공간에서 제거됩니다. - 이제 모든 라인이 2단계를 완료했습니다. 마지막 줄로 넘어가겠습니다.
- 마지막 줄(
$
)에서는 삭제 부분(d
)을 제외하고 2단계가 거의 모두 완료되었습니다.sed
, 없이 호출되면-n
각 입력 라인의 처리가 끝날 때 패턴 공간을 자동으로 인쇄합니다. 따라서 삭제하지 않으면 패턴 공간이 인쇄됩니다. 이제 다음의 모든 행이 포함됩니다.역순으로.