각 파일에서 개행, 공백 및 탭을 제거합니다.

각 파일에서 개행, 공백 및 탭을 제거합니다.

10K 텍스트 파일이 포함된 폴더가 있다고 가정해 보겠습니다. 모두 삭제하고 싶어요공간, 상표그리고선을 넘어각 파일에서.

이 작업을 어떻게 효율적으로 수행할 수 있습니까?

답변1

당신은 그것을 사용할 수 있습니다 tr:

LC_ALL=C tr -d '[:blank:]\n' < file_in > file_out

10,000개의 파일을 처리해야 하는 경우 더 나은 솔루션은 다음과 같습니다.

find . -type f -exec perl -i.bak -pe 's/ |\t|\n//g' {} +

답변2

GNU를 사용할 수 있습니다 sed.

$ shopt -s dotglob # includes "hidden" files beginning with .
$ sed -i.bak ':a;N;$!ba;s/[\n \t]//g' *

그러면 폴더의 모든 파일이 처리됩니다. 확장자를 사용하여 원본 파일의 백업을 저장합니다 .bak. 백업하지 않으려면 -i..bak

이렇게 하려면 다음을 반복적으로 사용하세요.

sed -i.bak ':a;N;$!ba;s/[\n \t]//g' $(find . -type f)

답변3

파일 내용을 처리하는 속도로 판단하면 tr정규식 솔루션보다 빠르거나 유사한 것 같습니다.perlsed

tr1만 개가 넘는 파일을 반복하는 경우 프로세스가 로 처리되기 때문에 할 수 있는 일이 많지 않으므로 stdin무엇을 하든 stdout10,000번을 생성하게 됩니다. 이것은 tr이것을 할 수 있는 find . -maxdepth -exec좋은 방법입니다 .

관련 정보