파일을 한 줄로 표시하려면 \n을 사용하세요.

파일을 한 줄로 표시하려면 \n을 사용하세요.

새 줄이 \n으로 표시되는 단일 줄 파일로 다시 표시하려는 여러 줄 텍스트 파일이 있습니다.

어떤 조언이라도 좋을 것입니다.

답변1

Perl Sledgehammer 사용:

$ perl -pe 's/\n/\\n/' < file.txt ; echo

echo표시 목적으로 필요한 경우 후행 개행 문자를 인쇄 할 수 있습니다 . 이는 또한 마지막 행의 NL을 \n.

또는 파일에 NUL 바이트가 포함되어 있지 않다고 가정하고 Bash에서 매우 간단한 솔루션을 사용하십시오. 그러나 이렇게 하면 전체 파일이 메모리에 로드됩니다.

$ IFS= read -r -d '' text < file.txt; printf '%s\n' "${text//$'\n'/\\n}"

답변2

여기서 고려해야 할 몇 가지 특별한 상황이 있다는 점에 유의하십시오. 4개의 파일을 예로 들어보겠습니다.

  • file1빈 파일
  • file2단일 줄 바꿈(␤) 문자(빈 줄)가 있는 파일
  • file3올바른 텍스트 파일입니다. 예:

    foo␤
    bar␤
    
  • file4마지막 줄이 있는 구분되지 않은 파일:

    foo␤
    bar
    

네가 원한다면:

  • file1:비어 있는
  • file2:\n␤
  • file3:foo\nbar\n␤
  • file4:foo\nbar␤

(예를 들어 출력을 에 전달하여 파일을 재구성할 수 있습니다 printf %b.)

그런 다음 다음을 수행할 수 있습니다.

perl -pe 's/\n/\\n/; END{print "\n" if $.}' < file

또는 GNU를 사용하십시오 awk:

gawk '{printf "%s", $0 (RT ? "\\n" : "")}
      END{if (NR) print ""}' < file

마지막 줄의 구분 기호를 무시하고 싶거나(있는 경우) 후행 줄 바꿈을 원하지 않는 경우 이를 조정할 수 있지만 이 4가지 다른 경우를 테스트하여 원하는 대로 작동하는지 확인할 수 있습니다. , 그리고 그들 중 일부에 대해서는 특별한 치료가 필요하다는 사실을 알게 될 수도 있습니다.

예를 들어, 귀하의

< file sed '$!G' | paste -sd '\\n' -

마지막 줄 구분 기호를 무시하는 솔루션은 file1및에 대해 빈 줄을 생성 합니다 file2(잘못 구분된 텍스트( )의 경우 해당 구현은 유효한 텍스트를 처리하도록 설계되었기 때문에 file4모든 sed/ 구현에서 paste올바르게 작동 하지 않을 수 있습니다).

perl -pe 's/\n?$/eof ? "\n" : "\\n"/e' < file

아마도 휴대성이 더 좋고 약간 더 좋을 수도 file1있으며 file2문제가 발생하지 않을 수도 있습니다.

답변3

tr한 문자를 두 문자로 바꿔야 하기 때문에 혼자서는 할 수 없습니다. sed인쇄하는 모든 항목의 끝에 개행 문자를 출력하기 때문에 자체적으로는 이 작업을 쉽게 수행할 수 없습니다. 하지만 두 가지를 결합하면 가능합니다. \n즉, 각 줄 끝에 개행 문자를 추가하고 제거하는 것입니다.

sed 's/$/\\n/' | tr -d '\n'

\n개행 문자 없이 끝나는 파일이 생성됩니다. 끝에 줄 바꿈을 원하면 에코하십시오.

{ sed 's/$/\\n/' | tr -d '\n'; echo; }

(이렇게 하면 빈 파일이 빈 줄이 하나만 있는 파일로 변환됩니다.) 마지막 파일이 필요하지 않으면 \n제거하세요.

sed 's/$/\\n/' | tr -d '\n' | sed 's/\\n$//'

답변4

제가 사용한 솔루션은 입니다.

< file.txt sed '$!G' | paste -sd '\\n' -
  • sed '$!G'마지막 ( ) 라인을 제외한 각 입력 라인에 빈 라인을 추가합니다 $.
  • paste -sd '\\n'백슬래시와 대체 문자를 사용하여 결과 줄을 붙여넣습니다 n. 유효한 텍스트 출력을 생성하려면 끝에 개행 문자를 추가하십시오.

관련 정보