Gilles의 perl과 awk 간결한 예제를 본 후, 나는 이것을 게시하는 것을 꺼려했지만 이미 연습을 마쳤으며 기능적인 스크립트이며 합리적으로 문서화되어 있습니다. 이 점만으로도 일부 사람들이 관심을 가질 수 있습니다.
이 스크립트는 공백이 포함되어 있어도 빈 줄을 공백으로 간주합니다.
텍스트의 여러 공백이 단일 공백으로 압축됩니다.
텍스트 행에서 후행 공백이 제거됩니다. 연속적인 빈 줄은 한 줄로 축소됩니다. 스크립트는 맨 위와 맨 아래의 빈 줄을 그대로 둡니다.
가장 사소한 스크립트 이외의 다른 경우에는 sed를 별도의 스크립트 파일로 구조화 된 형태로 훨씬 쉽게 작성할 수 있습니다. 다음은 그러한 예입니다.
확장 정규식 구문
호출 사용 : $ sed -rf script text-file
:first-empty-line
#================
/^[[:space:]]*$/ { # if pattern-space is empty...
$q # last line # flush-quit
n # pattern-flush=nextline-continue
:subsequent-empty-line
#=====================
/^[[:space:]]*$/ { # if pattern-space is empty...
$d # last line # pattern-delete-cycle
N # pattern+=nl+nextline
s/.*\n// # scrap the leading 'blank' line
t subsequent-empty-line # branch-on-substitute
}
}
:text-line
#=========
$q # last line # flush-quit
s/^(.*)[[:space:]]*/\1/ # trim trailing whitespace
s/ +/ /g # condense mulltiple spaces
N # pattern+=nl+nextline
/^.*\n[[:space:]]*$/ { # if newly-read line is blank
P # pattern-first-line-print
s/^.*\n// # remove the leading 'text' line
t first-empty-line # branch-on-substitute
}
# read line is text
s/\n/ / # replace \n with a space
t text-line # branch-on-substitute
참고 : flush
주석에서 의미 : 패턴 공간을 sed의 내부 stdout 처리로 보냅니다. stdout에 대한 명확한 인쇄를 의미하지는 않습니다. 출력은 sed의 -n
옵션 에 따라 다릅니다 . 예. q
명령 수단의 높이를 종료하지 않고 두 조각을 비교 ... : echo x |sed -e q
인쇄 X, echo x |sed -ne q
인쇄 아무것도의 사용 반면 p
에 따라 두 번 또는 한 번에 'X'를 인쇄 할 명령을 -n
옵션.