moreutils 스폰지 - 쉘 리디렉션과의 차이점은 무엇입니까? 유용한 예?

moreutils 스폰지 - 쉘 리디렉션과의 차이점은 무엇입니까? 유용한 예?
> brew install moreutils                                                          
==> Downloading https://homebrew.bintray.com/bottles/moreutils-0.55.yosemite.bottle.tar.gz    
######################################################################## 100.0%               
==> Pouring moreutils0.55.yosemite.bottle.tar.gz       

답변1

이라는 파일이 있고 in 으로 시작하는 input모든 줄을 제거하고 싶다고 가정해 보겠습니다 . 다음으로 시작하지 않는 모든 줄을 얻을 수 있습니다 .#input#

grep -v '^#' input

하지만 어떻게 변경하나요 input? 표준 POSIX 도구 상자를 사용하면 다음과 같은 임시 파일을 사용해야 합니다.

grep -v '^#' input >/tmp/input.tmp
mv /tmp/input.tmp ./input

셸 리디렉션을 사용합니다.

grep -v '^#' input >input

input읽기 전에 잘립니다 .

그렇게 하면 다음을 sponge수행할 수 있습니다.

grep -v '^#' input | sponge input

답변2

이것기타 유틸리티 홈 페이지그 자체로 일반적인 사용 사례를 문서화합니다.

sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd

여기서는 /etc/passwd가 기록되고 읽혀지며 수정되고 있습니다. 쓰기 전에 표준 입력을 정리하지 않으면 /etc/passwd가 손상될 수 있습니다(읽는 동안 파일이 변경되기 때문).

답변3

sponge내가 읽은 가장 간단한 예:

$ cat file1 
I
You
Me
We
Us

정렬하려면 간단히

$ sort file1 > file1_sorted

그러나 을 사용하면 sponge동일한 파일을 읽고 쓸 수 있습니다.

$ sort file1 | sponge file1

임시 파일이 필요하지 않습니다 file1_sorted. 이는 spongeSTDIN에서 먼저 읽은 다음 STDOUT별도의 단계로 에 기록하여 읽기 중에 파일이 변경될 경우 파일이 손상되는 것을 방지하기 때문입니다 .

관련 정보