저는 솔라리스 10을 사용하고 있습니다. 한 번에 여러 파일에서 빈 줄을 제거하는 가장 쉬운 방법은 무엇입니까?
답변1
빠르고 작은 스크립트가 작동해야 합니다. 나는 가지고있다이것nixCraft에서 사용해 보았는데 훌륭하게 작동합니다.
#!/bin/sh
files="/home/me/data/*.txt"
for i in $files
do
sed '/^$/d' $i > $i.out
mv $i.out $i
done
$files
귀하의 필요에 따라 교체하십시오.
답변2
빈 줄을 모두 제거하는 것이 가장 쉽습니다.
sed -i.bak '/^$/d' $FILES
확장자를 가진 백업이 생성됩니다 .bak
. 백업이 필요하지 않으면 삭제하세요.
공백이 있는 줄도 제거하려면(공백만 포함) 다음을 추가하세요 \W*
.
sed -i.bak '/^\W*$/d' $FILES
이는 --posix
gnu sed의 옵션과 함께 작동합니다(gnu 확장은 꺼져 있으므로 Solaris에서는 작동해야 한다고 생각합니다).
sed -i.bak '/^[ \t]*$/d' $FILES
필요한 경우 공백 문자를 더 추가합니다.
답변3
뒤에 오는 빈 줄만 제거하는 다양한 방법:
printf %s\\n "$(cat file)"|sponge file
tac file|awk /./,0|tac|sponge file
perl -0777 -pi -e 's/\n*$/\n/' file
gsed -i ':1;/^\n*$/{$d;N;b1}' file
bsdsed -i '' -e :1 -e '/^\n*$/{$d;N;b1' -e '}' file
echo "$(printf 'a\n\n')b"
명령 대체는 prints 와 같은 모든 후행 줄 바꿈을 제거합니다 ab
.
sponge
moreutils에서.
로 교체되다 tac
.tail -r
perl -0777
$_
전체 입력으로 설정 하고 각 줄 다음에 인쇄합니다 -p
. $_
바라보다 man perlrun
.
:
레이블을 설정하고, b
레이블로 분기하고, $d
마지막 줄의 패턴 공간을 제거하고, N
패턴 공간에 다음 줄을 추가합니다.
GNU는 and 뒤에 세미콜론을 sed
허용 하지만 POSIX와 BSD는 허용하지 않습니다. GNU에서는 작동 하지만 BSD에서는 작동하지 않으며 , BSD에서는 작동 하지만 GNU에서는 작동하지 않습니다 .:
b
sed
-i
sed
sed
-i ''
sed
sed
답변4
다음 한 줄 명령을 사용하여 여러 파일에서 빈 줄을 제거할 수 있습니다.
find directoryname -name "filename" -print | xargs sed -i '/^$/d'
예를 들어, 현재 디렉터리와 하위 디렉터리에 있는 모든 파일에서 빈 줄을 제거하려면 다음 명령을 사용할 수 있습니다.
find . -name "*.*" -print | xargs sed -i '/^$/d'