파일에서 빈 줄을 제거하는 방법 (탭과 공백 포함)?


답변:


26

그냥 grep비 공백에 대한 :

grep '[^[:blank:]]' < file.in > file.out

[:blank:]문자 범위 ( [...]) 내 에서 POSIX 문자 클래스라고합니다. 있는 것처럼 몇 가지 [:alpha:], [:digit:]... [:blank:]합니다 (POSIX 로케일에서, UTF8 로케일에서 유니 코드 수평 간격 문자를 공간과 탭,하지만 다른 로케일의 모든처럼 더있을 수 있습니다) 수평 공백과 일치하면서 [[:space:]]경기 수평 및 수직 흰색 공백 문자 ( [:blank:]세로 탭, 용지 공급 등과 같은 항목과 동일 )

grep '[:blank:]'

문자 중 하나를 포함하는 라인을 반환, :, b, l, a, n또는 k. 문자 클래스 내에서만 인식 [...]하고, ^[...]세트 니 게이트. 따라서 [^[:blank:]]공백이 아닌 문자를 의미합니다.


1
$줄 끝이 있어야 합니까?
Michael Durrant

@MichaelDurrant 그것은 양쪽에 고정되어 있지 않습니다
jordanm

1
@MichaelDurrant. [^[:blank:]]$공백이 아닌 행으로 만 일치합니다. 우리는 어디서나
Stéphane Chazelas

@StephaneChazelas이 명령이 작동하더라도 grep [: blank :] SOURCEFILE을 시도했습니다. 나는 [] 문자 클래스에 대한 이해 어떻게 작동하는지에 대한 아이디어를 줄 수 있습니까? snippet : blank :는 처음입니다.
Jamshed Ansari 사용자 3000272

grep -E '\S'작동하지 않는 경우가 있습니까?
terdon

21

awk해결책 은 다음과 같습니다 .

$ awk NF file

awk, NF유일한 비 빈 줄에 설정합니다. 이 조건이 일치하면 awk기본 조치가 print전체 행을 인쇄합니다.


깔끔하고 공백이있는 줄도 제거합니다.
wisbucky

7

어때요?

sed -e 's/^[[:blank:]]*$//' source_file > newfile

또는

sed -e '/^[[:blank:]]*$/d' source_file > newfile

각 줄에 대해 다음을 대체하십시오.

  • 시작하면 ( " ^")
  • 공백 또는 탭 ( " [[:blank:]]")이 0 번 이상있는 경우 ( " *")
  • 그런 다음 줄의 끝입니다 ( " $").

http://www.zytrax.com/tech/web/regex.htm#special의 :: blank :: 및 기타 특수 문자에 대한 추가 정보


4
[[:space:]]탭을 포함합니다. 공백이 없으면 탭 뒤에 공백이 있으면 정규식이 실패합니다.
jordanm

wctype(3)isalpha(3)맨은 문자 클래스가 일치 무엇인지에 대해 설명합니다.
jordanm

질문에 대답하지 않는 첫 번째 것을 제거하고 싶을 수도 있습니다.
Stéphane Chazelas

@MichaelDurrant [[: blank :]]에 대해 좀 써주시겠습니까?
Jamshed Ansari 사용자 3000272

[[: blank ::]]에 대한 정보를 추가했습니다. 스테판, 왜 첫 번째 작품이 작동하지 않습니까? // 결국 아무 것도없이 줄을 바꿀 것이라고 생각했습니다.
Michael Durrant

4

sed빈 줄을 제거하기 위해 명령을 사용할 수 있습니다 .

sed '/^$/d' in > out

이 명령은 "in"파일에서 빈 줄을 모두 삭제합니다.


특별히 요청한대로 공백과 탭만 포함 된 행은 삭제하지 않습니다.
dave_thompson_085

3

내가 그렇게 빠르지는 않지만 마지막에 재미있는 것을 찾은 것 같습니다.

| xargs -L1


1
좋은 짧은 하나이지만 더 많은 일을합니다 : 선행 공백과 탭을 제거하십시오.
jringoot

더 유능한 것으로 밝혀졌다? — 좋습니다! ;-P
poige

1
그리고 그것은 줄을 자릅니다 (기본값은 1024 자) 맨 페이지를 참조하십시오 : linux.die.net/man/1/xargs
jringoot

나는 그 간단한 도구에 더 깊이
빠져들고있다


0

다음 명령을 사용하십시오.

grep '\S' FILE

공백이나 탭을 포함한 모든 줄을 제거합니다.

그렇지 않으면 공백 / 탭이있는 행을 포함하지 않는 제거는 다음을 사용하십시오.

grep . FILE

예를 들면 다음과 같습니다.

$  printf "line1\n\nline2\n \nline3\n" > FILE
$  cat -v FILE
line1

line2

line3
$  grep '\S' FILE
line1
line2
line3
$  grep . FILE
line1
line2

line3

참조 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.