여러 파일의 후행 공백을 제거하는 방법은 무엇입니까?
여러 파일에 대한 후행 공백을 제거하는 어떤 도구 / 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 정규식을 사용하여 파일의 텍스트를 대체하고 그 자리에서 대체하는 작은 스크립트를 만들었습니다.
후행 공백을 제거하려면 다음과 같이 사용할 수 있습니다.
$ 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
'Programing' 카테고리의 다른 글
Git을 사용하여 이전 diff 커밋을 보려면 어떻게해야합니까? (0) | 2020.12.07 |
---|---|
DbContext에 CommandTimeout을 설정하는 방법은 무엇입니까? (0) | 2020.12.07 |
사용자 지정 개체가있는 ArrayList에서 특정 문자열 검색 (0) | 2020.12.07 |
.gitmodules에서 경로에 대한 하위 모듈 매핑이없고 .gitmodules 파일이 누락되었습니다. (0) | 2020.12.07 |
조각에서 onCreateView 전에 setUserVisibleHint 호출 (0) | 2020.12.07 |