빈 줄이 많은 문서가 있습니다.
둘 이상이있을 때 어떻게 제거 할 수 있습니까?
sed "s/\n\n//"
파일을 시도 했지만 작동하지 않았습니다. 오류가 없습니다.
답변
빈 줄을 제거하려면 :
sed '/^$/d'
sed
행 지향적이므로 “2 바이트 이상 특정 바이트”의 관점에서 생각 하면 해당 바이트가 줄 바꿈 일 때를 제외하고 작동합니다 . 그런 다음 전체 라인에 적합한 것을 생각해야합니다.
답변
필요 없습니다 sed
. grep
할 것이다 :
grep .
(즉 grep
, 하나 이상의 문자를 포함하는 모든 행과 일치하는 SPC, dot)입니다.
또한있다 :
tr -s '\n'
(개행 문자 시퀀스를 하나로 압축하십시오).
Chris가 언급했듯이 빈 줄을 제거하는 것 (위의 첫 번째 솔루션과 여기에 초점을 둔 대부분의 다른 답변과 같은)은 첫 줄이 비어있는 경우 요청 된 줄 바꿈 문자 시퀀스를 짜는 것과 같지 않기 때문에 둘 다 동일하지 않습니다. 첫 줄을 비우기 위해 하나의 선행 줄 바꿈 문자 만 사용합니다.
답변
@Bruce Ediger의 답변 sed
행 기반 \n
문자이며 행 끝 문자로 취급 하기 때문에이 도구가 가장 적합한 도구는 아닙니다 .sed
이 작업에 완벽한 도구 일 수도 있지만 여전히 다른 옵션이 있습니다.
-
펄
perl -ne 'print if /./' file.txt
또는
perl -pe '$/=""; s/\n+/\n/;' file.txt
$ /
입력 레코드 구분 기호 (기본적으로 줄 바꾸기). 이것은 “선”이 무엇인지에 대한 Perl의 아이디어에 영향을 미칩니다. null 문자열로 설정된 경우 빈 줄을 종결 자로 처리하는 것을 포함하여 awk의 RS 변수처럼 작동합니다 (빈 줄은 공백이나 탭을 포함 할 수 없음). 다중 문자 터미네이터와 일치 시키거나 파일 끝을 읽도록 undef하도록 다중 문자 문자열로 설정할 수 있습니다. 파일에 연속 된 빈 줄이 있으면 “\ n \ n”으로 설정하면 “”으로 설정하는 것과 약간 다른 의미입니다. “”로 설정하면 연속 된 두 개 이상의 빈 줄이 하나의 빈 줄로 취급됩니다. “\ n \ n”으로 설정하면 다음 입력 문자가 줄 바꾸기 인 경우에도 다음 단락에 속한다고 가정합니다.
-
gawk / awk
awk '$1' file.txt
그것은 게시 된 예제에서 작동하지만 @Stephane Chazelas가 지적했듯이 첫 번째 필드가 “like like”인 행도 삭제합니다
0
. 이것은 더 강력합니다.awk NF file.txt
답변
제거한다는 것은 무엇을 의미합니까? 중복을 제거하거나 (하나에 빈 줄을 여러 개) 모두 제거합니까?
중복을 제거하려면 sed를 사용하는 방법이 있습니다.
sed '$!N; /^\(.*\)\n\1$/!P; D'
uniq
명령을 시뮬레이트 합니다.
최선의 선택은 다음을 사용하는 것입니다 awk
.
awk NF <filename>
답변
이러한 답변의 대부분에 대해서는 후행 공백을 먼저 제거해야합니다. 줄 바꿈 두 개를 제거하면 모든 빈 줄이 제거됩니다. (이것에 대해 생각하다).
문자 그대로 OP는 “반복 된 빈 줄이 있으면 파일에서 모든 빈 줄을 제거합니다”를 원합니다.
일반 사용자는 “중복 된 빈 줄만 제거”를 원합니다.
이렇게하려면 후행 whitepace를 먼저 제거하고 cat -s를 통해 파이프하십시오.
sed s/[[:space:]]*$// | cat -s
그럼에도 불구하고 이것은 수퍼 플로어 스 선행 또는 후행 빈 줄을 제거하지 않습니다.
답변
주어진 빈 줄 순서에 대해 하나의 빈 줄을 유지하려면 다음을 수행하십시오.
sed -e '/./b' -e :n -e 'N;s/\n$//;tn'
답변
시도 sed -e 's#\\n\\n#\\n#g' input.file > output.file
하여 /
문제가 될 수 귀하의 필드 분리하고 정규 표현식의 한 부분으로 둘 다.