ED(1)

명칭
ed, red - 행 지향의 텍스트 문자 편집기

서식
ed [-] [-sx] [-p string] [file] red [-] [-sx] [-p string] [file]

해설
ed 유틸리티는, 행 지향의 텍스트 문자 편집기입니다. 본명령을 이용하는 것으로, 텍스트 파일의 생성, 표시, 변경 그 외의 조작을 행할 수가 있습니다. red (으)로서 기동되었을 경우, 에디터는 "제한" 모드로 동작합니다. 유일한 차이는, ‘’! (ed 하지만 쉘 명령와 해석)으로 개시 또는 ‘/’ (을)를 포함한 파일명의 사용을 제한하는 것입니다. 커런트 디렉토리외의 편집을 방해하는 것은, 유저가 커런트 디렉토리에 대해서 기입해 권한이 없는 경우 뿐입니다. 유저가 커런트 디렉토리에 대해서 기입해 권한이 있는 경우, 커런트 디렉토리에 기호 연결을 작성 가능하고, 기호 연결이 가리키는 파일을 유저가 편집하는 것을 red (은)는 방해하지 않습니다.

file 인수를 지정해 본명령을 기동하면(자), 파일 file 의 카피를 에디터의 버퍼에 읽어들입니다. 이후의 변경은 그 카피에 대해서 행해져 file 그리고 지정한 파일 자신이 직접 변경될 것은 없습니다. ed 명령을 종료할 때, w 명령로 명시적으로 세이브하지 않았던 변경점은 모두 없어집니다.

편집은, 명령 모드와 입력 모드의 2 개가 다른 모드를 구사해 행합니다. ed (을)를 기동하면(자), 우선 명령 모드에 들어갑니다. 본모드에서는, 표준 입력으로부터 명령을 읽어들여, 그것을 실행하는 것으로 에디터 버퍼의 내용 조작을 행합니다. 전형적인 명령은, 이하와 같은 것입니다.

,s/old /new /g

이것은, 편집하고 있는 텍스트 파일중에 old 그렇다고 하는 캐릭터 라인이 있으면, 이것들을 모두 캐릭터 라인 new 에 옮겨놓는 명령입니다.

a (append), i (insert), 혹은 c (change)(이)라고 하는 입력 명령이 입력되었을 경우, ed (은)는 입력 모드로 이행합니다. 이것이, 파일에 텍스트를 추가하는 주된 방법입니다. 이 모드에서는, 명령을 실행할 수 없습니다. 그 대신, 표준 입력으로부터 입력된 데이터는, 직접 에디터 버퍼로 기입해집니다. 행은, 개행 캐릭터까지의 텍스트 데이터 및, 마지막 개행 캐릭터를 포함한 데이터로부터 구성됩니다. 피리어드 1 개(살)만 (.) 의 행을 입력하면(자), 입력 모드를 종료합니다.

모든 ed 명령은, 모든 행 혹은 지정한 범위의 행의 조작이 가능합니다. 예를 들면, d 명령은 지정한 행을 삭제해, m 명령은 지정한 행을 이동합니다. 위에 나타낸 예의 같게, 치환에 의해 있는 행의 일부분만을 변경하는 것은 가능합니다만, s 명령은, 한 번에 전부의 행에 걸쳐서 변경을 행하는 일도 가능합니다.

일반적으로는, ed 명령은, 0 개 이상의 행 번호 및, 거기에 늘어서는 1 캐릭터 커멘드로부터 성립됩니다. 경우에 따라서는 추가의 파라미터를 가지는 일도 있습니다. 신음하면, 명령은 이하의 구조를 가집니다.

[address[,address]] command[parameters]

행 번호는 명령의 조작 대상행 혹은 대상행 범위를 나타냅니다. 행 번호의 지정 개수가, 명령이 받아들이고 가능한 개수보다 적은 경우에는, 디폴트의 행 번호가 채용됩니다.

옵션
이하의 옵션을 사용할 수 있습니다.

-s  진단 메세지를 억제합니다. 본옵션은, ed 의 입력이 스크립트에 의해 행해지는 경우에 유효합니다.

-x  계속되는 읽고 쓰기 시에 행해지는 암호화에 이용하는 열쇠의 입력을 재촉합니다 (x 명령을 참조해 주세요).

-p string
    명령 prompt로서 표시하는 캐릭터 라인을 지정합니다. 명령 prompt는, 커멘드 모드로 p 명령을 실행하는 것으로, 표시하는/하지 않는을 바꾸는 것이 가능합니다.

file
    편집 대상의 파일을 지정합니다. file 이름의 선두에 감탄부 (! )(이)가 부가되고 있었을 경우, 그 파일명은 쉘 명령와 해 해석됩니다. 이 경우, 편집 대상으로 해 읽히는 텍스트는, sh(1) 하지만 file 그리고 지정한 명령을 실행한 결과, 표준 출력에 출력되는 데이터입니다. 선두가 감탄부로 시작되는 파일을 편집하는 경우에는, 파일명의 선두에 backslash (\)를 부가해 주세요. 감탄부 이외의 캐릭터로 시작되는 파일명에 대해서는, 편집 대상의 파일명은 file 됩니다.

행 지정
행은, 버퍼내의 행 번호로 표현됩니다. ed 유틸리티는 현재행 (을)를 관리하고 있어, 명령에 행 번호가 지정되지 않는 경우는, 현재행이 디폴트행으로서 이용됩니다. 파일이 최초로 읽어내진 직후는, 현재행은 파일의 마지막 행이 됩니다. 일반적으로, 현재행은 명령이 조작한 마지막 행이 됩니다.

행 번호는, 이하의 일람중 1 개(살) 및, 보조적으로 부가된다 상대행 번호 (오프셋(offset))로부터 구성됩니다. 상대행 번호는, 임의의 숫자의 편성과 연산자, 그리고 공백 캐릭터를 포함합니다 (예를 들면 +, - (이)나 ^ 하지만 연산자에 포함됩니다). 행 번호는, 왼쪽에서 오른쪽으로 해석되어 그러한 연산자를 포함한 값은, 현재행으로부터의 상대행 차례 호로 해석됩니다.

행 번호의 표현에 관해서 상기의 규칙이 적용되는 가운데, 행 번호 0 (제로)에 관해서는, 예외적인 취급이 됩니다. 이것은 「최초의 행보다 전」을 의미해, 그것이 올바른 의미를 가지는 경우는 항상 이용 가능합니다.

행 범위는, 콤마 혹은 세미콜론으로 단락지어진 2 개의 주소로 나타납니다. 최초로 지정되는 행 번호는, 2 번째로 지정되는 행 번호를 넘는 값을 지정해 (은)는 안됩니다. 행 범위 지정으로 행 번호가 1 개 밖에 지정되지 않았던 경우에는, 2 번째에 지정되는 주소로서 최초로 지정된 주소가 설정됩니다. 여기서 3 개 이상의 행 번호가 지정되면(자), 마지막 2 개의 행 번호로 결정되는 범위가 명령 실행 대상이 됩니다. 행 번호의 지정을 1 개밖에 상정하고 있지 않는 명령의 경우, 마지막 1 개의 행 번호의 행이 커멘드 실행 대상 됩니다.

콤마로 단락지어진 각 행 번호는, 현재행으로부터의 상대행을 지시합니다. 세미콜론으로 단락지어지고 있는 경우는, 범위의 초의 행은 현재행이 설정되어 범위의 끝은 초의 행으로부터의 상대행으로 표현됩니다.

행 번호의 지정에는, 이하의 심볼이 사용 가능합니다.

.   버퍼중의 현재행을 나타냅니다.

$   버퍼중의 맨 마지막 줄을 나타냅니다.

n   버퍼내의 n 번째의 행을 나타냅니다. n (은)는, [0,$] 의 사이입니다.

- or ^
    1 행 전의행입니다. 상대행 지정 -1 (와)과 동등하고, 복수 지정하는 것으로 효과를 누적하는 것이 가능합니다.

-n or ^n
    n 행전의 행을 나타냅니다. n (은)는, 부가 아닌 정수입니다.

+   다음의 행을 나타냅니다. 이것은, +1 (와)과 같고, - (와)과 같은 누적적 지정이 가능합니다.

+n or whitespace
    n 행 뒤의 행을 나타냅니다. n (은)는, 부가 아닌 정수입니다. n 의 전에 whitespace (공백 캐릭터) (을)를 부가해 지정했을 경우도 +n (이)라고 해석됩니다.

, or %
    버퍼의 최초부터 끝까지를 나타냅니다. 이것은, 1,$ (와)과 지정했을 경우와 동등합니다.

;   버퍼중의 현재행으로부터 마지막 행까지를 나타냅니다. 이것은, .,$ (와)과 지정했을 경우와 동등합니다.

/re/
    지정된 정규 표현 re (을)를 포함한, (현재행보다 뒤의) 다음의 행을 나타냅니다. 필요하면, 캐릭터 라인 검색은 텍스트 선두에 되풀이해, 현재행에 이를 때까지 검색을 행합니다. // (은)는, 마지막에 행한 검색을 반복합니다.

? re?
    지정한 정규 표현 re (을)를 포함한, 현재행보다 전의 행을 나타냅니다. 필요하면, 캐릭터 라인 검색은 텍스트의 마지막에 되풀이해, 현재행에 이를 때까지 검색을 행합니다. ?? (은)는, 마지막에 행한 검색을 반복합니다.

'lc k (mark) 명령로 마크를 붙인 행을 나타냅니다. 여기서 lc (은)는, 영소문자 1 캐릭터입니다.

정규 표현
정규 표현은 텍스트를 선택할 때에 이용하는 패턴입니다. 예를 들면 다음의 ed 명령

g/string /

하 string (을)를 포함한 모든 행을 표시합니다. 정규 표현은 s 명령로 낡은 텍스트를 새로운 텍스트로 옮겨놓을 때에도 이용됩니다.

캐릭터 리터럴을 지정하는데 더해 정규 표현은 캐릭터 라인의 클래스를 표현할 수가 있습니다. 이와 같이 해 표현된 캐릭터 라인은, 거기에 대응하는 정규 표현에 「매치 한다」라고 말합니다. 어느 정규 표현이 하나의 행안의 복수의 캐릭터 라인에 매치 하는 경우, 매치 하는 부분의 쳐 가장 왼쪽에 있어 가장 긴 것이 선택됩니다.

정규 표현을 조립하려면 이하의 심볼이 이용됩니다:

c   이하에 드는 것을 제외하는 임의의 캐릭터 c (은)는, 그 캐릭터 자신에게 매치 합니다. 이러한 캐릭터에는 ‘{’, ‘}’, ‘(’, ‘’), ‘<’, ‘>’ 하지만 포함됩니다.

\c  backslash로 이스케이프 한 캐릭터 c (은)는, 그 캐릭터 자신에게 매치 합니다. 다만 ‘{’, ‘}’, ‘(’, ‘’), ‘<’, ‘>’ (을)를 제외합니다.

.   임의의 한 글자에 매치 합니다.

[char-class]
    캐릭터 클래스 char-class 에 포함되는 임의의 한 글자에 매치 합니다. 캐릭터 클래스 char-class 에 ‘’] (을)를 포함하려면 , 캐릭터 ‘’] (을)를 최초의 캐릭터로 지정합니다. 캐릭터의 범위를 지정하려면 , 범위의 양단의 캐릭터의 사이를 ‘-’ 그리고 잇습니다. 예를 들면 ‘a-z’ (은)는 소문자 전체를 나타냅니다. 이하와 같은 리터럴 표기도, 캐릭터 집합을 지정하기 위해서 캐릭터 클래스 char-class 그리고 사용할 수가 있습니다:

    [:alnum:] | [:cntrl:] | [:lower:] | [:space:]
    [:alpha:] | [:digit:] | [:print:] | [:upper:]
    [:blank:] | [:graph:] | [:punct:] | [:xdigit:]

    캐릭터 클래스 char-class 의 최초 혹은 마지막 캐릭터로서 ‘-’ 하지만 이용되면(자), 그것은 그 캐릭터 자신에게 매치 합니다. 캐릭터 클래스 char-class 안의 이외의 캐릭터는 모두, 그것들 자신에게 매치 합니다.

    이하의 형식의 캐릭터 클래스안의 패턴:

    [.col-elm.] or,
    [=col-elm=]

    하 locale(5) 에 따라 해석됩니다 (현재로서는 서포트되지 않습니다). 여기서 col-elm 하 collating element 입니다. 자세한 설명은 regex(3) (을)를 참조해 주세요.

[^char-class]
    캐릭터 클래스 char-class 에 포함되지 않는, 개행 이외의 임의의 한 글자에 매치 합니다. 캐릭터 클래스 char-class (은)는 위에서 정의하고 있습니다.

^   ^ 하지만 정규 표현의 최초의 캐릭터인 경우, 그 정규 표현은 줄머리에서만 매치 합니다. 그 이외의 경우, ^ (은)는 그것 자신에게 매치 합니다.

$   $ 하지만 정규 표현의 마지막 캐릭터인 경우, 그 정규 표현은 줄 끝에서만 매치 합니다. 그 이외의 경우, $ (은)는 그것 자신에게 매치 합니다.

\<  이것에 계속되는 단일 캐릭터의 정규 표현 혹은 그 부분식이, 단어의 선두에서만 매치 하도록(듯이) 합니다 (이 기능은 이용할 수 없다 경우가 있습니다).

\>  이것에 계속되는 단일 캐릭터의 정규 표현 혹은 그 부분식이, 단어의 말미에서만 매치 하도록(듯이) 합니다 (이 기능은 이용할 수 없다 경우가 있습니다).

\(re\)
    부분식 (subexpression) re (을)를 정의합니다. 부분식은 네스트 할 수 있습니다. 이 이후, \n ( n (은)는 [1,9] 의 범위의 수) 의 형식의 후방 참조는, n 번째의 부분식에 매치 한 텍스트에 전개됩니다. 예를 들면, 정규 표현 ‘\(. *\) \1’ (은)는, 같은 캐릭터 라인이 인접하고 있는 것 같은 임의의 캐릭터 라인에 매치 합니다. 부분식은 좌측의 딜리미터로부터 순서에 번호가 차입니다.

*   직전에 있는 단일 캐릭터의 정규 표현 혹은 그 부분식의 0 회 이상의 반복에 매치 합니다. * 하지만 정규 표현 혹은 그 부분식의 최초의 캐릭터로서 이용되었을 경우, * (은)는 그 캐릭터 자신에게 매치 합니다. * 연산자는 때에 예기치 않은 결과를 가져오는 일이 있습니다. 예를 들면, 정규 표현 ‘b*’ (은)는 캐릭터 라인 ‘abbb’ 의 선두에 매치 합니다 (부분 캐릭터 라인 ‘bbb’ (이)가 아닙니다). 이것은 눌에의 매치이 가장 왼쪽에 있는 성냥이기 때문입니다.

\{n, m\} or \{n, \} or \{n\}
    직전에 있는 단일 캐릭터의 정규 표현 혹은 그 부분식의, n 회이상 m 회이하의 반복해에 매치 합니다. m 하지만 생략 되었을 경우, n 회이상의 반복해에 매치 합니다. 더욱 콤마도 생략 되었을 경우, 정확히 n 회의 반복에게만 매치 합니다.

각 regex(3) 의 실장에 따라서는, 더욱 정규 표현 연산자가 몇개인가 정의되고 있는 일이 있습니다.

명령
모든 ed 명령은, 1 캐릭터로부터 됩니다만, 추가 파라미터가 필요한 커멘드도 있습니다. 명령의 파라미터가 복수의 행에 걸치는 경우에는, 그 파라미터를 포함한 커멘드 의 끝을 포함한 행을 제외해, 줄 끝에 backslash (\)를 부가해 주세요.

일반적으로는, 1 행 마다 1 명령을 넣는 것이 허락되고 있습니다. 그렇지만, 대부분의 명령은, 커멘드 실행을 행한 후의 데이터 갱신 그 외를 확인하기 위해서, p (print), (이)나 l (list), n (enumerate), (와)과 같은 표시계의 명령을 동시에 지정할 수 있습니다.

인터럽트 (일반적으로는 ^C)를 입력하는 것으로, 현재 실행하고 있는 명령을 강제 종료해, 명령 모드에 되돌릴 수가 있습니다.

ed 유틸리티는, 이하의 명령을 사용할 수 있습니다. 명령 실행시에 아무 지정도 없는 경우의 디폴트의 행 번호 혹은 행 범위가 괄호내에 나타나고 있습니다.

(.) a
    지정한 행의 뒤에 텍스트를 추가합니다. 텍스트는 입력 모드로 입력되어 갑니다. 현재행 번호는, 입력된 마지막 행으로 설정됩니다.

(.,.) c
    버퍼내의 지정한 행을 변경합니다. 지정한 행의 데이터는, 버퍼로부터 소거 되어 거기에 대해서 텍스트 데이터를 입력하게 됩니다. 텍스트는 입력 모드로 입력되어 갑니다. 현재행 번호는, 입력한 마지막 행으로 설정됩니다.

(.,.) d
    지정한 범위를 버퍼로부터 삭제합니다. 삭제한 범위의 뒤에 행이 계속되고 있는 경우, 현재행 번호는, 그 행으로 설정됩니다. 그렇지 않은 경우에는, 현재행 번호는, 삭제된 범위의 전의 행으로 설정됩니다.

e file
    file (을)를 편집해, 디폴트의 파일명을 설정합니다. 만약 file 하지만 지정되지 않았던 경우에는, 디폴트의 파일명이 사용됩니다. 본명령 실행시에, 그것까지 다른 파일을 편집하고 있었을 경우에는, 그 내용은 모두 소거되어 새로운 파일이 읽힙니다. 현재행 번호는, 입력된 마지막 행으로 설정됩니다.

e! command
    ! command 그리고 지정된 명령을 실행해, 그 결과적으로 표준 출력에 출력된 데이터를 편집합니다 (후술 한다! command (을)를 참조해 주세요). 디폴트의 파일명은 변경되지 않습니다. command 의 출력이 읽히기 전에, 버퍼내에 존재한 행은 모두 소거됩니다. 현재행 번호는, 입력된 마지막 행으로 설정됩니다.

E file
    무조건으로 file 그리고 지정한 파일을 읽어들여, 편집합니다. e 명령와 동작은 닮습니다만, 벌써 버퍼상의 데이터로 변경이 더해지고 (이)라고 있는 경우에서도, 미기입의 변경을 경고를 내지 않고 버리게 되는 점이 다릅니다. 현재행 번호는, 입력된 마지막 행으로 설정됩니다.

f file
    디폴트 파일명을 file (으)로 설정합니다. file 이름이 지정되지 않는 경우에는, 디폴트 파일명이 표시됩니다.

(1,$) g/re/command-list
    command-list 그리고 지정된 명령을, 지정한 정규 표현 re 에 일치하는 각 행에 대해서 실행합니다. 현재행 번호는, command-list 그리고 지정된 명령이 실행되기 전에, 지정한 정규 표현에 일치한 행 (으)로 설정됩니다. g 명령이 종료했을 경우, 현재행 번호는 마지막에 command-list 실행의 영향을 받은 행으로 설정됩니다.

    command-list 그리고 지정되는 명령은, 1 행 마다 1 개(살)씩 쓰여질 필요가 있습니다. 각 명령 행의 끝에는, 제일 마지막 명령행을 제외해 backslash (\)를 기술한다 필요가 있습니다. 명령 g, G, v, V (을)를 제외하는 모든 명령을 지정 가능합니다. command-list 안의 공행은, p 명령와 동등하게 다루어집니다.

(1,$) G/re/
    지정한 정규 표현 re 에 일치한 행에 대해서, 대화 편집을 행합니다. 지정한 정규 표현에 일치하는 캐릭터 라인을 포함한 행이 있으면(자), 그 행을 표시해, 현재행 번호를 설정합니다. 그리고, 유저에게 command-list 의 입력을 재촉합니다. G 명령이 종료했을 경우, 현재행 번호는, command-list 실행의 영향을 받은 마지막 행으로 설정됩니다.

    command-list 의 기술 형식은, g 명령로 지정하는 것 것과 같습니다. 개행만의 경우는, 명령 실행을 하지 않는다 (누르코만드리스트를 지정한) 것으로 간주해집니다. ‘&’ 캐릭터만을 입력했을 경우에는, 직전에 실행한 (누르코만드리스트가 아니다) 명령을 재실행합니다.

H   에러 메세지의 출력의 유무를 바꿉니다. 디폴트에서는, 에러 메세지는 출력되지 않습니다. ed 스크립트를 작성하는 경우, 스크립트의 디버그를 위해서(때문에), 본명령을 최초로 실행하는 것을 추천합니다.

h   마지막에 표시된 에러 메세지를 표시합니다.

(.) i
    편집 버퍼중의 현재행의 전에, 텍스트를 삽입합니다. 텍스트는 입력 모드로 입력되어 갑니다. 현재행 번호는, 입력된 마지막 행으로 설정됩니다.

(.,.+1) j
    지정한 범위의 행을 1 행에 연결합니다. 지정한 행은 버퍼로부터 삭제되어 그 행의 내용을 포함한 1 행으로 옮겨집니다. 현재행 번호는, 옮겨놓을 수 있었던 행으로 설정됩니다.

(.) klc
    행에, 영소문자 lc 그리고 지정한 마크를 붙입니다. 그 후, 마크를 붙여진 행은, 명령중에서 'lc (즉, 싱글 쿼트와 소문자 lc) (으)로서 지정할 수 있게 됩니다. 마크는, 그 행이 삭제될지도 깔고는 변경될까 하지 않는 한, 사라지는 것은 없습니다.

(.,.) l
    지정한 범위의 행의 내용을 보기 쉽게 표시합니다. 만약 1 개의 행이 1 화면 이상을 차지하는 경우 (예를 들면 바이노리필드를 보고 있다 경우 등) “--More--” prompt가 최하행에 표시됩니다. 다음의 화면을 표시하기 전에 ed 유틸리티는 리턴 키가 입력될 때까지 기다립니다. 현재행 번호는, 표시된 마지막 행으로 설정됩니다.

(.,.) m(.)
    지정한 범위의 행을 버퍼내에서 이동합니다. 지정한 행은, 명령의 우변으로 지정한 행의 뒤로 이동됩니다. 이동처의 행으로서는, 0 (제로)(이)가 지정 가능합니다. 현재행 번호는, 이동된 마지막 행으로 설정됩니다.

(.,.) n
    지정한 행의 내용을, 행 번호 돌출하고 표시합니다. 현재행 번호는, 표시된 마지막 행으로 설정됩니다.

(.,.) p
    지정한 범위의 행의 내용을 표시합니다. 현재행 번호는, 표시된 마지막 행으로 설정됩니다.

P   명령 prompt 표시의 유무를 바꿉니다. 명령 기동시의 옵션 -p string 그리고 prompt가 지정되어 있지 않으면, 명령 prompt의 표시는 디폴트로 오프가 되어 있습니다.

q   ed (을)를 종료합니다.

Q   무조건 ed (을)를 종료합니다. 이 명령은 q 명령와 닮아 있습니다만, 아직 파일에 써내지지 않았다 변경이 있어도 경고하지 않고 종료하는 점이 다릅니다.

($) r file
    file 그리고 지정된 파일을, 지정한 행의 뒤로 읽어들입니다. file 하지만 지정되지 않는 경우, 디폴트의 파일명이 읽기에 사용됩니다. 이 명령에 앞서 디폴트의 파일명이 설정되어 있지 않은 경우, 디폴트의 파일명에는, file 그리고 지정된 것이 설정됩니다. 그 이외의 경우, 디폴트의 파일명은 변경되지 않습니다. 현재행 번호는, 읽힌 파일의 마지막 행으로 설정됩니다.

($) r! command
    command 그리고 지정된 명령을 실행해, 그 결과적으로 표준 출력에 출력되었다 데이터를 지정한 행의 뒤로 읽어들입니다 (후술 한다! command (을)를 참조해 주세요). 디폴트의 파일명은 변경되지 않습니다. 현재행 번호는, 읽힌 마지막 행의 행 번호로 설정됩니다.

(.,.) s/re/replacement/

(.,.) s/re/replacement/g

(.,.) s/re/replacement/n
    지정한 행의 텍스트중의, 정규 표현 re 에 일치하는 캐릭터 라인을, 캐릭터 라인 replacement 에 옮겨놓습니다. 디폴트에서는, 각각의 행으로 최초로 일치한 캐릭터 라인만을 옮겨놓습니다. g (global) 사픽스가 지정되었을 경우, 일치한 캐릭터 라인은 모두 옮겨놓을 수 있습니다. n 사픽스 (n (은)는 정의 정수)가 지정되었을 경우, n 번째에 일치한 캐릭터 라인만을 옮겨놓습니다. 지정한 범위에서 한번도 캐릭터 라인의 치환이 일어나지 않았던 경우, 에러로 간주해집니다. 현재행 번호는, 마지막에 치환이 발생한 행으로 설정됩니다.

    re 및 replacement (은)는, 스페이스 및 개행을 제외한 모든 캐릭터를 이용해 단락짓는 것이 가능합니다 (후술 한다 s 명령을 봐 주세요). 마지막 딜리미터중 1 개(살)이나 2 개가 생략 되었을 경우, 마지막에 캐릭터 라인 치환이 발생한 행은, p 명령이 지정되었을 경우와 같게 표시됩니다.

    replacement 안의 이스케이프되어 있지 않다 ‘&’ (은)는, 일치한 캐릭터 라인과 옮겨놓을 수 있습니다. 캐릭터 순차 순서 \m (m (은)는 [1,9] 의 범위의 정수입니다 )는, 일치한 캐릭터 라인의 m 번째의 후방 참조로 옮겨놓을 수 있습니다. replacement 의 안에 들어오는 캐릭터가 ‘%’ 만이었던 경우, 마지막에 행한 치환의 replacement 하지만 사용됩니다. 개행을 replacement (으)로 지정하고 싶은 경우는, backslash를 이용해 이스케이프 하면 가능합니다.

(.,.) s
    마지막 치환을 반복합니다. 이 형식의 s 명령은, 회수를 나타내는 사픽스 n 혹은, 다른 r, g, p 목의 캐릭터와의 편성도 가능합니다. n 하지만 지정되면(자), n 번째에 일치한 캐릭터 라인만이 치환됩니다. r 사픽스가 지정되면(자), 마지막 치환이 발생한 캐릭터 라인의 대신에, 마지막에 지정한 정규 표현이 사용됩니다. g 사픽스는, 마지막 치환으로 이용한 그로바르사픽스의 사용의 유효/무효를 바꿉니다. p 사픽스는, 마지막 치환으로 지정된 프린트사픽스를 반전합니다. 현재행 번호는, 마지막에 치환이 발생한 행으로 설정됩니다.

(.,.) t(.)
    지정한 범위의 행을, 명령 캐릭터의 우변으로 지정한 행 번호의 뒤에 카피 (즉 전송)합니다. 카피처의 행 번호로서는, 0 (제로)의 지정이 용서되고 있습니다. 현재행 번호는, 카피한 제일 마지막 행의 행 번호로 설정됩니다.

u   마지막에 실행한 명령의 실행 결과를 취소해, 현재행 번호를, 취소하고 싶다 명령이 실행되기 전의 것에 되돌립니다. 글로벌 명령이다 g, G, v, V 에 대해서는, 그 개변은 1 명령로 행해졌다고 해서 취급합니다. u (은)는 자기 자신의 동작을 취소할 수도 있습니다.

(1,$) v/re/command-list
    지정한 범위의 행 가운데, 지정한 정규 표현 re (와)과 일치하는 캐릭터 라인이 포함되지 않은 행에 대해, command-list 그리고 지정한 명령을 실행합니다. 이것은 g 명령에 동작이 닮았습니다.

(1,$) V/re/
    지정한 범위의 행 가운데, 지정한 정규 표현 re 에 일치하는 캐릭터 라인이 포함되지 않은 행에 대해, 대화 편집을 행합니다. 이것은 G 명령에 동작이 닮았습니다.

(1,$) w file
    지정한 범위의 행을, file 그리고 지정한 파일에 써냅니다. 그것까지 file 에 격납되고 있던 내용은, 경고없이 소거됩니다. 디폴트 파일명이 설정되어 있지 않은 경우, 디폴트 파일명은 file (으)로 설정됩니다. 그 이외의 경우에서는, 디폴트 파일명은 변경되지 않습니다. 파일명이 지정되지 않았던 경우에는, 디폴트 파일명이 사용됩니다. 현재행 번호는 변경되지 않습니다.

(1,$) wq file
    지정한 범위의 행을 file 그리고 지정한 파일에 써내, q 명령을 실행합니다.

(1,$) w! command
    지정한 범위의 행의 내용을! command 의 표준 입력에 써냅니다 (! command 에 대해서는, 이하의 설명을 참조해 주세요). 디폴트 파일명 및 현재행 번호는 변경되지 않습니다.

(1,$) W file
    지정한 범위의 행의 내용을, file 그리고 지정한 파일의 뒤로 추가 기입합니다. w 명령와 닮아 있습니다만, 지정한 파일에 그것까지 격납되고 있던 내용 하지만 없어질 것은 없습니다. 현재행 번호는 변경되지 않습니다.

x   이후의 읽고 쓰기로 이용되는 암호화열쇠의 입력을 재촉합니다. 개행만이 입력되면(자), 암호화는 해제됩니다. 그 이외의 경우, 키 읽기중의 에코는 억제됩니다. 암호화 및 복호화(decode)는 bdes(1) 알고리즘을 이용해 행해집니다.

(.+1) z n
    지정한 행으로부터 한 번에 n 행만 스크롤 합니다. n 하지만 지정되지 않는 경우에는, 현재의 윈도우 사이즈만 스크롤 합니다. 현재행 번호는, 마지막에 표시한 행의 행 번호로 설정됩니다.

! command
    command 그리고 지정한 명령을, sh(1) (을)를 이용해 실행합니다. command 의 최초의 캐릭터가 ‘’! 의 경우에는, 그 캐릭터는 직전에! command 그리고 실행한 명령 캐릭터 라인이 격납됩니다. command 캐릭터 라인을 backslash (\)로 이스케이프 했을 경우에는, ed 유틸리티는 처리를 행하지 않습니다. 그러나, 이스케이프 되지 않는다 % 캐릭터가 있었을 경우에는, 그 캐릭터 라인은 디폴트 파일명으로 옮겨집니다. 쉘이 명령 실행으로부터 돌아왔을 경우에는, ‘’! 하지만 표준 출력에 출력됩니다. 현재행 번호는 변경되지 않습니다.

($)=
    지정된 행의 행 번호를 표시합니다.

(. +1) newline
    지정한 행을 표시합니다. 그리고, 현재행 번호를 표시한 행의 것으로 설정합니다.

관련 파일
/tmp/ed. *
    버퍼 파일
ed.hup
    단말이 회선 절단 했을 경우에, ed 하지만 버퍼 내용을 써내는 파일

관련 항목
bdes(1), sed(1), sh(1), vi(1), regex(3)

USD:12-13 B. W. Kernighan, P. J. Plauger, Software Tools in Pascal, Addison-Wesley, 1981.

제한
ed 유틸리티는, file 인수에 대해서 backslash 이스케이프 처리를 가합니다. 즉, 파일명중에서 backslash (\)를 앞에 두고 붙인 캐릭터는, 리터럴로서 해석됩니다.

(바이너리가 아니다) 텍스트 파일의 최후가 개행 캐릭터로 끝나지 않은 경우, ed (은)는 그것을 읽고 쓰기할 때에 개행 캐릭터를 추가합니다. 바이노리필드의 경우는, ed (은)는 이러한 개행 캐릭터 추가는 실시하지 않습니다.

1 행 당의 오버헤드는 정수 4 개(살)분입니다.

진단
에러가 발생하면(자), ed 하 ‘’? (을)를 표시해, 명령 모드로 돌아오는지, 스크립트에 의한 실행의 에러의 경우에는 프로그램을 종료합니다. 마지막 에러 메세지에 대한 설명은, h (help) 명령을 이용하는 것으로 표시 가능합니다.

g (global) 명령은, 검색이나 치환이 실패했다고 하는 에러를 은폐 합니다. 그 때문에, 스크립트 중(안)에서 조건부 명령 실행을 행하게 하는데 잘 사용됩니다. 예를 들면

g/old /s //new /

(은)는, 출현한 캐릭터 라인 old (을)를 모두 캐릭터 라인 new 에 옮겨놓습니다. u (undo) 명령이 글로벌 커멘드 리스트내에서 실행되었을 경우, 커멘드 리스트는 1 번만의 실행이 됩니다.

진단이 무효에되어 있지 않으면 ed (을)를 종료하려고 하는 경우나 버퍼내의 데이터를 써내지 않고 다른 파일을 편집하려고 하는 경우에 에러가 됩니다. 그 경우에서도, 동일한 명령을 2 회 입력하면(자), 커멘드는 성공합니다. 그러나, 지금까지의 미보존의 편집 결과는, 모두 없어집니다.

역사
ed 명령은 Version 1 AT&T UNIX 로 등장했습니다.