Solaris 10: 여러 파일에서 후행 공백 줄 제거

Solaris 10: 여러 파일에서 후행 공백 줄 제거

저는 솔라리스 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

이는 --posixgnu 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.

spongemoreutils에서.

로 교체되다 tac.tail -r

perl -0777$_전체 입력으로 설정 하고 각 줄 다음에 인쇄합니다 -p. $_바라보다 man perlrun.

:레이블을 설정하고, b레이블로 분기하고, $d마지막 줄의 패턴 공간을 제거하고, N패턴 공간에 다음 줄을 추가합니다.

GNU는 and 뒤에 세미콜론을 sed허용 하지만 POSIX와 BSD는 허용하지 않습니다. GNU에서는 작동 하지만 BSD에서는 작동하지 않으며 , BSD에서는 작동 하지만 GNU에서는 작동하지 않습니다 .:bsed-isedsed-i ''sedsed

답변4

다음 한 줄 명령을 사용하여 여러 파일에서 빈 줄을 제거할 수 있습니다.

find directoryname -name "filename" -print | xargs sed -i '/^$/d'

예를 들어, 현재 디렉터리와 하위 디렉터리에 있는 모든 파일에서 빈 줄을 제거하려면 다음 명령을 사용할 수 있습니다.

find . -name "*.*" -print | xargs sed -i '/^$/d'

관련 정보