Programing

여러 파일의 후행 공백을 제거하는 방법은 무엇입니까?

lottogame 2020. 12. 7. 07:43
반응형

여러 파일의 후행 공백을 제거하는 방법은 무엇입니까?


여러 파일에 대한 후행 공백을 제거하는 어떤 도구 / UNIX 하나의 라이너 있는가 에-장소 .

예를 들어 find 와 함께 사용할 수있는 입니다.


원하는

sed --in-place 's/[[:space:]]\+$//' file

그러면 수직 탭 및 양식 피드를 포함하여 모든 POSIX 표준 정의 공백 문자 가 삭제됩니다 . 또한 0 개 이상의 매처 ( *) 를 사용하는 다른 답변과 달리 후행 공백이 실제로 존재하는 경우에만 교체를 수행합니다 .

--in-place단순히 -i. 플래그가 실제로 수행하는 작업을 더 잘 설명하는 경향이 있기 때문에 스크립트에서 긴 형식을 사용하는 것을 선호합니다.

다음과 find같이 쉽게 통합 할 수 있습니다 .

find . -type f -name '*.txt' -exec sed --in-place 's/[[:space:]]\+$//' {} \+

Mac을 사용하는 경우

주석에서 지적했듯이 gnu 도구가 설치되어 있지 않으면 위의 내용이 작동하지 않습니다. 이 경우 다음을 사용할 수 있습니다.

find . -iname '*.txt' -type f -exec sed -i '' 's/[[:space:]]\{1,\}$//' {} \+

모두 GNU sed를 필요로하는 다른 솔루션과 달리이 솔루션은 POSIX 표준 명령을 구현하는 모든 Unix 시스템에서 작동합니다.

find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && mv /tmp/.$$ "$i";done' arg0 {} +

편집 :이 약간 수정 된 버전은 파일 권한을 유지합니다.

find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && cat /tmp/.$$ > "$i";done' arg0 {} +

공백을 수정하기 위해 이것을 사용 했습니다 .

while IFS= read -r -d '' -u 9
do
    if [[ "$(file -bs --mime-type -- "$REPLY")" = text/* ]]
    then
        sed -i -e 's/[ \t]\+\(\r\?\)$/\1/;$a\' -- "$REPLY"
    else
        echo "Skipping $REPLY" >&2
    fi
done 9< <(find . \( -type d -regex '^.*/\.\(git\|svn\|hg\)$' -prune -false \) -o -type f -print0)

풍모:

  • 캐리지 리턴을 유지 [:space:]하므로 (와 달리 ) Windows / DOS 스타일 파일에서 잘 작동합니다.
  • "정상적인"공백에 대해서만 걱정-파일에 세로 탭 등이있는 경우 의도적 일 수 있습니다 (테스트 코드 또는 원시 데이터).
  • .git 및 .svn VCS 디렉토리를 건너 뜁니다.
  • file텍스트 파일이라고 생각 되는 파일 만 수정합니다 .
  • 건너 뛴 모든 경로를보고합니다.
  • 모든 파일 이름으로 작동 합니다 .

이건 어때:

sed -e -i 's/[ \t]*$//'

Btw, 이것은 편리한 사이트입니다 : http://sed.sourceforge.net/sed1line.txt


sed 전문가가 아닌 사람들을 위해 JavaScript 정규식을 사용하여 파일의 텍스트를 대체하고 그 자리에서 대체하는 작은 스크립트를 만들었습니다.

http://git.io/pofQnQ

후행 공백을 제거하려면 다음과 같이 사용할 수 있습니다.

$ node sed.js "/^[\t ]*$/gm" "" file

즐겨


ex

Ex 편집기 (Vim의 일부)를 사용해보십시오 .

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

참고 : 재귀 (bash4 및 zsh)의 경우 새 globbing 옵션 ( **/*.*)을 사용할 수 있습니다 . 에서 활성화합니다 shopt -s globstar.

perl

find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;

스프링 프레임 워크 코드 스타일 .

sed

를 사용 sed하려면 sed로 후행 공백을 제거하는 방법을 확인하십시오.


See also: How to remove trailing whitespace of all files recursively?


For some reason, the sed and perl commands did not work for me. This did :

find ./ -type f | rename 's/ +$//g'

Feels like the most straight forward one to read as well

참고URL : https://stackoverflow.com/questions/10711051/how-to-remove-trailing-whitespaces-for-multiple-files

반응형