sed는 ‘double’줄 바꿈 문자를 제거 할 수 있습니까? 있습니다. 둘 이상이있을 때 어떻게 제거

빈 줄이 많은 문서가 있습니다.

둘 이상이있을 때 어떻게 제거 할 수 있습니까?

sed "s/\n\n//"파일을 시도 했지만 작동하지 않았습니다. 오류가 없습니다.



답변

빈 줄을 제거하려면 :

sed  '/^$/d'

sed행 지향적이므로 “2 바이트 이상 특정 바이트”의 관점에서 생각 하면 해당 바이트가 줄 바꿈 일 때를 제외하고 작동합니다 . 그런 다음 전체 라인에 적합한 것을 생각해야합니다.


답변

필요 없습니다 sed. grep할 것이다 :

grep .

(즉 grep, 하나 이상의 문자를 포함하는 모든 행과 일치하는 SPC, dot)입니다.

또한있다 :

tr -s '\n'

(개행 문자 시퀀스를 하나로 압축하십시오).

Chris가 언급했듯이 빈 줄을 제거하는 것 (위의 첫 번째 솔루션과 여기에 초점을 둔 대부분의 다른 답변과 같은)은 첫 줄이 비어있는 경우 요청 된 줄 바꿈 문자 시퀀스를 짜는 것과 같지 않기 때문에 둘 다 동일하지 않습니다. 첫 줄을 비우기 위해 하나의 선행 줄 바꿈 문자 만 사용합니다.


답변

sed행 기반 \n문자이며 행 끝 문자로 취급 하기 때문에이 도구가 가장 적합한 도구는 아닙니다 .@Bruce Ediger의 답변 sed 이 작업에 완벽한 도구 일 수도 있지만 여전히 다른 옵션이 있습니다.

  1. perl -ne 'print if /./' file.txt
    

    또는

    perl -pe '$/=""; s/\n+/\n/;' file.txt
    

    감사합니다 @ruakh 날 보내 만들고 읽는 :

    $ /

    입력 레코드 구분 기호 (기본적으로 줄 바꾸기). 이것은 “선”이 무엇인지에 대한 Perl의 아이디어에 영향을 미칩니다. null 문자열로 설정된 경우 빈 줄을 종결 자로 처리하는 것을 포함하여 awk의 RS 변수처럼 작동합니다 (빈 줄은 공백이나 탭을 포함 할 수 없음). 다중 문자 터미네이터와 일치 시키거나 파일 끝을 읽도록 undef하도록 다중 문자 문자열로 설정할 수 있습니다. 파일에 연속 된 빈 줄이 있으면 “\ n \ n”으로 설정하면 “”으로 설정하는 것과 약간 다른 의미입니다. “”로 설정하면 연속 된 두 개 이상의 빈 줄이 하나의 빈 줄로 취급됩니다. “\ n \ n”으로 설정하면 다음 입력 문자가 줄 바꾸기 인 경우에도 다음 단락에 속한다고 가정합니다.

  2. 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하여 /문제가 될 수 귀하의 필드 분리하고 정규 표현식의 한 부분으로 둘 다.