ed에서 외부 명령을 통해 일련의 행을 필터링할 수 있습니까?

ed에서 외부 명령을 통해 일련의 행을 필터링할 수 있습니까?

에서는 ed명령의 출력을 현재 버퍼로 검색하는 데 사용할 수 있습니다 r !COMMAND. 명령 입력에 일련의 행을 쓰는 것도 사용할 수 있습니다 1,3w !COMMAND.

그러나 이 두 가지 작업을 동시에 수행하는 방법을 알 수 없습니다.

r 1,3w !sort
1,3w !sort: No such file or directory

에서 이 작업을 수행할 수 있습니까 ed?

답변1

내가 찾은 유일한 방법은 외부 파일을 사용하여 결과를 임시로 저장하는 것입니다.

$ cat input.txt 
13
5
29
22
45
64
17
20
69
91
$ ed input.txt 
29
1,3w !sort -n > temp.txt
8
1,3d
0r temp.txt
8
wq
29

답변2

두 가지를 동시에 수행하는 방법

텍스트 버퍼에서 명령으로 한 줄을 쓰고 stdin다시 읽어서 원래 줄을 바꿀 수는 없습니다. 분명히 그런 종류의 작업을 수행하도록 설계되지 않았습니다. 한번 시도해 보십시오. 그렇긴 하지만, 파일을 열고, 텍스트 버퍼에서 줄을 제거하고, 다른 호출을 통해 처리한 다음(현재 버퍼 대신 원본 파일에서 읽기) 원본을 읽기 전에 버퍼를 출력하는 등의 약간의 변형을 언제든지 사용할 수 있습니다. 라인 범위: stdout
edvim
ededed

ed -s 입력 파일

5,8d
4r ! ed -s infile<<<$'5,8w !sort -n\nq'
,p
q

관련 정보