2012-10-17 2 views
3

기본 여기에 몇 가지 유닉스 쉘이 필요 "-"나는 더 볼 명령에 대한파일 이름이 필요한 ed에 stdin을 어떻게 제공 할 수 있습니까?

에서 대상을, 에드 말 :

print '%-2p\nq' | ed -s FILE 

나는 파일 이름 대신, 일부 cmd를의 표준 출력에서 ​​스트림을 제공 할 수 , 처리 할 데이터 :

SomeCMD | ed -s SOMETHING_MAGICAL <<< 'print '%-2p\nq' 

이 가능합니까?

+1

은 [? 당신이있어 무엇을 물어 봐도 * 정말 * 달성하기 위해 노력] (http://mywiki.wooledge.org/XyProblem) 스트림 편집은 [Stream EDitor] (http://www.freebsd.org/cgi/man.cgi?query=sed)처럼 할 수 있습니다. – ghoti

+0

예 :'SomeCmd | sed '2p; 3q'' 또는'SomeCmd | sed '1d; 4q'' 등 – ghoti

답변

6

ed은 stdin에서 명령을 읽습니다. 따라서 파일이 stdin에도 있다면 어떻게 작동합니까? 사실

, 당신은 데이터를 쓰기 시작하는 한 줄의 시작 부분에

i 

과 출력을 연결할 경우 피드 파일 입력 표준 입력을 통해, 다음, 하나의 을 추가 할 수 있습니다. 입력을 끝내고 모든 명령이옵니다. 결과를 stdout으로 출력 할 수도 있습니다. 파일에 한 줄만 있다면 단 하나의 만 있으면 끊어집니다. 그것에있는.

는 input.file 파일 포함 그렇다면이 :

First line 
Second line 
Third line 

그리고 파일 commands.list이 포함

. 
1d 
1,$w /dev/stdout 

그런 다음이 명령 행 ...

echo i | cat - input.file commands.list | ed -s 

출력 내용 :

Second line 
Third line 

대담한 말 : tadaaaaa!?

참고 : 단일 의 사례를 막을 수 있습니다. 행을 이스케이프하는 필터를 통해 파일을 파이핑 한 다음 ed 명령을 사용하여 다시 이스케이프 처리하여 파일의 행을 필터링합니다. 나는 당신의 독창성에 맡긴다.

또 다른 참고 : 당신이 정말 이에 대한을 나오지 사용해야합니다,하지만 난 그게 의견을 수행 할 수없는 이로 가자 없었다.

+0

당신은 이것에 대해 약간의 조명을했습니다! – MeaCulpa

1

r을 사용하여 텍스트 버퍼로 명령 출력을 읽습니다. 그래서, 포터블 :

printf '%s\n' 'r !df -h' g/tmpfs/d ,p q | ed -s 

또는

(가) 상기 df -h의 출력 판독
ed -s << IN 
r !df -h 
g/tmpfs/d 
,p 
q 
IN 

, tmpfs 매칭 라인을 삭제하고 그 결과를 출력한다.
쉘 프로세스 대체 지원하는 경우 : SOMETHING_MAGICAL!라는 것을 gnu ed

printf '%s\n' g/tmpfs/d ,p q | ed -s <(df -h) 

합니다. man 페이지 당으로
: 주어진 경우 '파일'에서 읽어

시작 편집. 'file'이 '!'으로 시작하는 경우 셸 명령의 출력을 읽습니다. herestring

printf '%s\n' g/tmpfs/d ,p q | ed -s '!df -h' 

또는 :

ed -s '!df -h' <<< $'g/tmpfs/d\n,p\nq\n' 
관련 문제