grep을 통해 텍스트 파일에서 빈 줄 제거


답변:


129

grep . FILE


(그리고 당신이 정말로에서 다음, sed를 수행하려는 경우 : sed -e /^$/d FILE)

(그리고 당신이 정말로 다음, AWK에서 작업을 수행하려는 경우 : awk /./ FILE)


1
단! 다른 명령에 대한 TY도 있지만 grep이 나의 새로운 가장 친한 친구 인 것 같습니다.
user191960

grep. FILE이 작동하지 않습니다. 파일 내용을 검색하려면 grep을 사용하고 파일 내용을 편집하려면 sed를 사용하는 것이 좋습니다.
Michael Dillon

7
sed -ne/./p너무 작동하고 awk /./더 짧습니다 (작업은 {print}지정되지 않은 경우). @ ghostdog74 : grep '[^[:space:]]'그럼.
ephemient

5
이해하지 못하는 사람들을 .위해 개행을 제외한 모든 문자와 일치하는 정규식입니다.
wisbucky 2014 년

3
grep . FILE주어진 예제에서 작동하지만 파일이 문자 집합의 일부가 아닌 바이트를 가질 수있는 경우에는 반드시 그런 것은 아닙니다. 예를 들어 GNU grep 2.20에서는 printf "\x80\n" | grep .아무것도 출력하지 않습니다.
vinc17 2014 년

37

다음을 시도하십시오.

grep -v -e '^$'

이것은 grep과 동일한 효과를 갖습니다. 빈 줄로 공백이 잡히는 FILE.
ghostdog74 2010 년

1
"grep"은 패턴과 일치하는 줄을 찾습니다. "." 모든 문자와 일치합니다. "grep. FILE"은 1 자 이상의 모든 행과 일치합니다. "grep -v"는 패턴과 일치하는 행을 제외합니다. OP는 "모든 빈 새 줄을 제거하십시오"라고 말했습니다. 공백 만있는 행을 제외하려면 "grep -v '^ $'". " "은 0 개 이상의 선행 패턴 (이 경우 공백)과 일치합니다. 다른 공백 문자 (탭, 용지 공급 등)도 일치 및 제외하는 것을 선호 할 수 있습니다.
Mr. Ree 2010 년

3
이 방법을 사용하면 "grep. FILE"보다 더 쉽게 여러 제외를 결합 할 수 있습니다. 예를 들어, conf 파일을보고 있었고 주석 처리 된 모든 줄과 빈 줄을 모두 제외하고 싶었습니다. 그래서 "grep -v -e '#'-e '^ $'squid.conf"를 사용했습니다. 치료를 받았습니다.
Ben K

2
이것은 'grep보다 훨씬 빠릅니다. 파일'. 이는 정규식 '.'을 확인하는 더 복잡한 작업 때문입니다. ^ $가 일치하지 않는 즉시 제외하는 것보다.
Édouard Lopez

2
grep -v -e '^$'항상 작동하지만 grep .. 예를 들어 GNU grep 2.20에서는 printf "\x80\n" | grep .아무것도 출력하지 않고 printf "\x80\n" | grep -v '^$'비어 있지 않은 줄 을 출력합니다.
vinc17 2014 년

11
with awk, just check for number of fields. no need regex

$ more file
hello

world

foo

bar

$ awk 'NF' file
hello
world
foo
bar

따옴표가 필요하지 않습니다. 이 트릭은 awk1line.txt-다시, 대부분의 어색한 트릭도 있습니다. :)
ephemient

2
복합 awk 문에 대해 쉘에서 실행하기 때문에 따옴표를 넣는 것이 나의 좋은 습관입니다. 여전히 따옴표를 넣어야합니다. 그러니이 습관을 기르는 것은 어떨까요?
ghostdog74 2010 년

이것이 어떻게 작동하는지에 대한 설명 : stackoverflow.com/questions/23544804/...
wisbucky

9

다음은 공백이거나 공백 문자 만 포함 된 모든 행을 제거하는 솔루션입니다.

grep -v '^[[:space:]]*$' foo.txt

2

이 시도: sed -i '/^[ \t]*$/d' file-name

아니오가있는 모든 빈 줄을 삭제합니다. 공백 (공백 또는 탭), 즉 파일의 (0 개 이상).

참고 : 대괄호 안에는 '공백'과 '\ t'가 있습니다.

수정자는 -i업데이트 된 내용을 파일에 다시 씁니다. 이 플래그가 없으면 화면에서 빈 줄이 삭제 된 것을 볼 수 있지만 실제 파일은 영향을받지 않습니다.


1

grep '^..' my_file

THIS

IS

THE

FILE

EOF_MYFILE

최소 2 자 이상의 행만 출력으로 제공합니다.

THIS
IS
THE
FILE
EOF_MYFILE

grep '^' my_file출력 결과를 참조하십시오.

THIS

IS

THE

FILE

EOF_MYFILE

또한 grep '^.' my_file출력

THIS
IS
THE
FILE
EOF_MYFILE

1

빈 줄을 제거하는 것이 공백을 포함하는 줄을 의미하는 경우 다음을 사용하십시오.

grep '\S' FILE

예를 들면 :

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

line2

line3

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

line3

line4

또한보십시오:


0

전 방법 시도 :

ex -s +'v/\S/d' -cwq test.txt

여러 파일의 경우 (내부 편집) :

ex -s +'bufdo!v/\S/d' -cxa *.txt

파일을 수정하지 않고 (표준 출력에 인쇄) :

cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin

0

Perl은 과잉 일 수 있지만 잘 작동합니다.

완전히 비어있는 모든 줄을 제거합니다.

perl -ne 'print if /./' file

완전히 비어 있거나 공백 만 포함 된 모든 줄을 제거합니다.

perl -ne 'print if ! /^\s*$/' file

원본을 편집하고 .bak 파일을 만드는 변형 :

perl -i.bak -ne 'print if ! /^\s*$/' file

0

Xcode 프로젝트에있는 총 코드 줄이 무엇인지 알고 싶고 각 swift 파일의 개수를 나열하는 데 관심이 없다면 답을 얻을 수 있습니다. 코드가 전혀없는 줄을 제거하고 주석 접두사가 붙은 줄을 제거합니다.//

Xcode 프로젝트의 루트 수준에서 실행하십시오.

find . \( -iname \*.swift \) -exec grep -v '^[[:space:]]*$' \+ | grep -v -e '//' | wc -l

코드에 다음 과 같이 시작 /*하고 끝나는 주석 블록이있는 경우 */:

/*
 This is an comment block 
*/

그러면 이것들이 카운트에 포함됩니다. (너무 열심히).


0

가장 간단한 답변 -----------------------------------------

[root@node1 ~]# cat /etc/sudoers | grep -v -e ^# -e ^$
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
[root@node1 ~]#
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.