표준 출력을 파일 내용과 연결합니다.

표준 출력을 파일 내용과 연결합니다.

어떻게 stdout(또는 stderr)과 파일의 결과를 최종 파일로 연결할 수 있습니까?

예를 들어

ls -a | grep text1

중간 내용에 저장하지 않고 AND를 file2.txt최종 결과(가 아님 file2.txt) 에 연결합니다.grep text1grep text1 > file1.txt

답변1

ls -a | grep text1 | cat file2.txt -

-표준 입력을 나타냅니다 . 아니면 쓸 수도 있어요

ls -a | grep text1 | cat - file2.txt

다른 순서로 출력합니다.


프로세스 대체를 사용한 또 다른 가능성:

cat <(ls -a | grep text1) file2.txt

또는 다른 순서로:

cat file2.txt <(ls -a | grep text1)

답변2

{}또는 명령을 함께 결합하여 ()결합된 출력을 리디렉션할 수 있습니다.

{ 
  cat file1.txt
  echo "Now the ls/grep"
  ls -a |grep foobar
} > file2.txt

개인 여행자로서:

{ cat file1.txt; echo "Now the ls/grep"; ls -a |grep foobar; } >file2.txt 

마지막 비트 ;가 필요합니다.

답변3

file2.txt다음을 수행하여 끝에 추가할 수 있습니다.

ls -a | grep text1 >> file2.txt

아니면 다른 파일에 넣고 싶으시다면

ls -a | grep text1 > output.txt
cat file2.txt >> output.txt

stdout 대신 stderr을 원하는 경우

ls -a | grep text1 2>> output.txt

ls -astderr에 아무 것도 출력할 가능성이 없기 때문에 파일에 아무 것도 넣지 않을 수 있습니다 .

편집: 결과를 파일로 리디렉션하는 대신 다른 프로그램으로 파이프하려면 명명된 파이프를 사용할 수 있습니다.

mkfifo pipe1
cat pipe1 | next program &
ls -a | grep text1 >> pipe1
cat file2.txt >> pipe1

답변4

ls -a | { grep text1; cat file2.txt; } >outfile

출력이 필터링될 때 시작된 프로세스와 공유되는 ls표준 출력에 기록됩니다 . grep사본을 작성하는 경우catlsgrepcatfile2.txt동일한 공유 표준 출력으로. 일반적으로 이렇게 하면 파이프 수가 줄어듭니다.

... 또는...

ls -a | sed -ne'$r file2.txt' -e'/text1/p' >outfile

이는 일치하는 콘텐츠만 인쇄하여 출력에 대한 입력을 sed나타내고 필터링합니다.greptext1정규식. $마지막 출력에 도달하면 ls현재 라인 사이클을 완전히 완료한 후에 출력 r하도록 예약합니다 file2.txt. 따라서 일단 인쇄됩니다.(또는 인쇄하지 않음)출력의 마지막 줄에도 ls모든 것을 표준 출력으로 복사합니다.file2.txt

관련 정보