![파일을 한 줄로 표시하려면 \n을 사용하세요.](https://linux55.com/image/10264/%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%95%9C%20%EC%A4%84%EB%A1%9C%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%A0%A4%EB%A9%B4%20%5Cn%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%84%B8%EC%9A%94..png)
새 줄이 \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
. 유효한 텍스트 출력을 생성하려면 끝에 개행 문자를 추가하십시오.