같은 줄에 여러 줄 출력 (단일 출력)을 인쇄하는 방법이 있습니까?
예를 들어, 출력이 다음과 같은 경우
abc
def
qwerty
인쇄가 가능합니까?
abcdefqwerty
같은 줄에 여러 줄 출력 (단일 출력)을 인쇄하는 방법이 있습니까?
예를 들어, 출력이 다음과 같은 경우
abc
def
qwerty
인쇄가 가능합니까?
abcdefqwerty
답변:
여러 가지 방법이 있습니다. 예를 들어, 귀하의 예를 file
다음에 저장했습니다 .
$ cat file | tr -d '\n'
abcdefqwerty$
$ cat file | perl -pe 's/\n//'
abcdefqwerty$
마지막 줄을 포함하여 모든 줄 바꿈 문자를 제거합니다. 대신 다음을 수행 할 수 있습니다.
$ printf "%s\n" "$(cat file | perl -pe 's/\n//')"
abcdefqwerty
$ printf "%s\n" "$(cat file | tr -d '\n')"
abcdefqwerty
여러 줄 출력을 통해 파이프 할 수 있습니다 awk
awk '{printf "%s",$0} END {print ""}'
또는 사용 sed
:
sed ':a;N;$!ba;s/\n//g'
$ echo -e "1\n2\n3\n4" | awk '{printf "%s",$0} END {print ""}'
1234
$ echo -e "1\n2\n3\n4" | sed ':a;N;$!ba;s/\n//g'
1234
이를 위해 Perl을 사용하려면 해당 chomp
기능을 사용할 수 있습니다 .
perl -pe chomp
하나 이상의 파일 이름을 후속 인수로 전달할 수 있습니다.
perl -pe chomp file1 file2 file3
어떤 경우에는 그렇게하고 싶지 않을 수도 있지만 대신 해당 명령을 파이프하거나 리디렉션 할 수 있습니다. (이러한 능력과 그 경고는 모두 다른 솔루션 perl -p
이나 perl -n
기반 솔루션 에도 적용됩니다 .)
따라서 실행 결과를 처리하려면 다음을 수행하십시오 some-command
.
some-command | perl -pe chomp
이것은 terdon 's answer 의 Perl 명령보다 잠재적으로 빠릅니다 . 개행 문자 (로 표시 \n
)는 Perl이 각 행의 끝을 결정하는 데 사용하는 문자 이기 때문에이 상황에서는 행의 끝에 만 나타납니다. s/\n//
줄 바꿈을 위해 전체 줄을 검색하고 chomp
마지막 줄을 제거합니다 (마지막 줄이있을 수도 있고 없을 수도 있음).
성능이 실제로 선호되는 주된 이유는 아닙니다 chomp
. terdon의 답변perl
에 있는 명령은 매우 긴 줄을 가진 거대한 파일을 처리하지 않으면 약간 느려집니다. 그리고 속도가 필요하다면 David Foerster의 길은 여전히 더 빠를 것입니다. 그러나 Perl을 사용하는 경우 정확히 여기에 맞는 도구 입니다.chomp
chomp
s/\n//
. 궁극적으로 어느 쪽이 더 나은지에 대한 객관적인 대답은 없을 것입니다.
그러나 $(
)
후행 줄 바꿈이 인쇄되도록 명령 대체 ( )를 사용하지 않는 것이 좋습니다 . 처리중인 텍스트가 짧지 않으면 한 번에 모든 텍스트를 수집 한 다음 인쇄해야하므로 명령이 이해하기 어려워 질 수 있습니다. 대신 David Foerster가 제안 하고 실행 echo
하거나 printf '\n'
그 이후에 수행 할 수 있습니다 .
perl -pe chomp; echo
David Foerster가 표시 한대로 해당 명령 에서 리디렉션 하는 파이프 를 사용 하는 경우 두 명령의 출력이 함께 수집되도록 묶을 수 있습니다. 터미널에 인쇄하는 경우 위와 같이 정확하게 실행할 수 있습니다. / 는 실제로 입력을 읽지 않기 때문에 명령 을 파이핑하거나 리디렉션 하는 경우에도 작동 합니다. 즉, 이것은 작동합니다 :{
;}
echo
printf '\n'
some-command | perl -pe chomp; echo
여기에서는 간단하게 다음을 제거 할 수 없습니다 {
;}
.
{ perl -pe chomp; echo; } | some-other-command
또는 원하는 경우 perl
최종 줄 바꿈 자체를 인쇄 할 수 있습니다 . 둘러싸처럼 perl
과 echo
에서 명령을 {
;}
,이 방법은 작동하더라도 당신이있는 거 배관 또는 리디렉션 에서 그 (와 같은 모든 접근이 작품 당신이있는 거 배관 에 그것을, 너무) :
perl -wpe 'chomp; END { print "\n" }'
terdon의 답변에있는 명령은 최종 줄 바꿈을 인쇄하는 이러한 방법으로도 잘 작동합니다. 예를 들면 다음과 같습니다.
perl -pe 's/\n//'; echo
perl -pe 's/\n//; END { print "\n" }'
perl -wpe 'chomp; END { print "\n" }
같은 프로세스, 후행 에코 추가에 비해 경미한 장점
쉘 전용 방법 사용 :
while IFS= read -r line || [ -n "$line" ]; do printf "%s" "$line"; done < inputfile.txt
이 답변에는 생성하려는 문제에 대한 해결책이 있습니다. bash는 왜 $ (cat file)에서 \ n을 제거합니까?
입력 cat myfile.txt
하면 다음이 표시됩니다.
abc
def
ghi
그러나 입력 echo $(cat myfile.txt)
하면 다음을 볼 수 있습니다.
abc def ghi
이 방법은 별도의 새 줄이 있었던 공간을 삽입합니다. 이렇게하면 출력을 쉽게 읽을 수 있지만 질문 범위를 엄격하게 준수하지는 않습니다.
printf
+cat
+perl
콤보가 훨씬 더를 통해 처리됩니다perl -pe 's/\n//;END{printf "\n"}' input.txt
단일 공정, 아니 명령 대체 및 따옴표와 함께 장난,없이 UUOC. 혹시.