![표준 출력을 파일 내용과 연결합니다.](https://linux55.com/image/80063/%ED%91%9C%EC%A4%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%ED%8C%8C%EC%9D%BC%20%EB%82%B4%EC%9A%A9%EA%B3%BC%20%EC%97%B0%EA%B2%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
어떻게 stdout(또는 stderr)과 파일의 결과를 최종 파일로 연결할 수 있습니까?
예를 들어
ls -a | grep text1
중간 내용에 저장하지 않고 AND를 file2.txt
최종 결과(가 아님 file2.txt
) 에 연결합니다.grep text1
grep 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 -a
stderr에 아무 것도 출력할 가능성이 없기 때문에 파일에 아무 것도 넣지 않을 수 있습니다 .
편집: 결과를 파일로 리디렉션하는 대신 다른 프로그램으로 파이프하려면 명명된 파이프를 사용할 수 있습니다.
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
사본을 작성하는 경우cat
ls
grep
cat
file2.txt
동일한 공유 표준 출력으로. 일반적으로 이렇게 하면 파이프 수가 줄어듭니다.
... 또는...
ls -a | sed -ne'$r file2.txt' -e'/text1/p' >outfile
이는 일치하는 콘텐츠만 인쇄하여 출력에 대한 입력을 sed
나타내고 필터링합니다.grep
text1
정규식. $
마지막 출력에 도달하면 ls
현재 라인 사이클을 완전히 완료한 후에 출력 r
하도록 예약합니다 file2.txt
. 따라서 일단 인쇄됩니다.(또는 인쇄하지 않음)출력의 마지막 줄에도 ls
모든 것을 표준 출력으로 복사합니다.file2.txt