주어진 파일의 줄 끝에서 후행 공백을 제거하는 방법은 무엇입니까?

주어진 파일의 줄 끝에서 후행 공백을 제거하는 방법은 무엇입니까?

소스 파일의 쓸모없는 공간이 지겨워서 vim을 구성하여 해당 공간을 표시하기도 했습니다.

문제는 (항상 그런 것은 아니지만) 동료 개발자들과 함께 데드 스페이스를 처리해야 하는 경우가 많다는 것입니다.

나는 단지 소스 파일(정규 표현식 제공)을 스캔하고 주어진 모든 파일에서 공백을 제거하고 싶습니다.

온라인에서 검색했지만("bash 제거 공백" 등) 유용한 내용을 찾지 못했습니다.

답변1

쓸모없는 공백이 줄 끝의 후행 공백을 참조하는 경우 GNU 시스템에서 작동합니다.

find -name '*.c' -print0 | xargs -r0 sed -e 's/[[:blank:]]\+$//' -i

( *.c소스 파일의 일치하는 콘텐츠로 대체)

답변2

이것은 반복되는 질문입니다!

perl -i -pe 's/\s+\n/\n/'  ./*.c

(이렇게 하면 " \r\n"도 제거됩니다.)

나는 보통 약간 더 복잡한 버전인 "nrs"(추가 공백 없이)를 사용합니다.

#!/usr/bin/perl -pi
s/\h*(\r\n|\n|\r)/\n/g;                 ## normalize \n (DOS, MAC)
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//;  ## remove BOM !

설치하세요: ( chmod 755 nrs; cp nrs ~/bin; 또는 이와 유사한 것)

그리고 다음을 사용하세요:nrs ./*.c

바이너리에서는 사용하지 마세요!

답변3

Ex 방식을 사용해 보세요.

ex +'bufdo!%s/\s\+$//e' -scxa *.*

현재 폴더의 모든 파일에서 후행 공백을 제거합니다. 재귀(bash4/zsh)의 경우 다음을 사용할 수 있습니다.새로운 와일드카드 옵션( **/*.*).

참고: 이 :bufdo명령은POSIX.

답변4

이미 정상인 파일을 건드리지 않으려면 GNU 도구를 사용하십시오.

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'

관련 정보