같은 줄에 여러 줄 출력을 인쇄하려면 어떻게해야합니까?


답변:


13

으로 지정된 세트에서 모든 문자를 제거 할 수 있습니다 tr -d. 개행 문자를 제거하려면 다음을 사용하십시오.

tr -d '\n'

항상 그렇듯이 입력 및 출력 리디렉션 및 파이프를 사용하여 파일 및 기타 프로세스에서 읽거나 쓸 수 있습니다.

마지막 줄 바꿈을 유지하려면 당신은 단순히 그것을 다시 추가 할 수 있습니다 echo또는 printf '\n', 예를 :

cat file1 file2... | { tr -d '\n'; echo; } > output.txt

10

여러 가지 방법이 있습니다. 예를 들어, 귀하의 예를 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

나는 생각 printf+ cat+ perl콤보가 훨씬 더를 통해 처리됩니다 perl -pe 's/\n//;END{printf "\n"}' input.txt 단일 공정, 아니 명령 대체 및 따옴표와 함께 장난,없이 UUOC. 혹시.
Sergiy Kolodyazhnyy 2018 년

7

여러 줄 출력을 통해 파이프 할 수 있습니다 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

추가 정보 : AWK · serverfault.SE를 사용하여 줄 바꿈 제거



2

이를 위해 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을 사용하는 경우 정확히 여기에 맞는 도구 입니다.chompchomps/\n// . 궁극적으로 어느 쪽이 더 나은지에 대한 객관적인 대답은 없을 것입니다.

마지막 줄 바꿈을 인쇄합니다.

그러나 $( )후행 줄 바꿈이 인쇄되도록 명령 대체 ( )를 사용하지 않는 것이 좋습니다 . 처리중인 텍스트가 짧지 않으면 한 번에 모든 텍스트를 수집 한 다음 인쇄해야하므로 명령이 이해하기 어려워 질 수 있습니다. 대신 David Foerster가 제안 하고 실행 echo하거나 printf '\n'그 이후에 수행 할 수 있습니다 .

perl -pe chomp; echo

David Foerster가 표시 한대로 해당 명령 에서 리디렉션 하는 파이프 를 사용 하는 경우 두 명령의 출력이 함께 수집되도록 묶을 수 있습니다. 터미널에 인쇄하는 경우 위와 같이 정확하게 실행할 수 있습니다. / 는 실제로 입력을 읽지 않기 때문에 명령 파이핑하거나 리디렉션 하는 경우에도 작동 합니다. 즉, 이것은 작동합니다 :{ ;}echoprintf '\n'

some-command | perl -pe chomp; echo

여기에서는 간단하게 다음을 제거 할 수 없습니다 { ;}.

{ perl -pe chomp; echo; } | some-other-command

또는 원하는 경우 perl최종 줄 바꿈 자체를 인쇄 할 수 있습니다 . 둘러싸처럼 perlecho에서 명령을 { ;},이 방법은 작동하더라도 당신이있는 거 배관 또는 리디렉션 에서 그 (와 같은 모든 접근이 작품 당신이있는 거 배관 그것을, 너무) :

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" } 같은 프로세스, 후행 에코 추가에 비해 경미한 장점
Sergiy Kolodyazhnyy


1

이 답변에는 생성하려는 문제에 대한 해결책이 있습니다. bash는 왜 $ (cat file)에서 \ n을 제거합니까?

입력 cat myfile.txt하면 다음이 표시됩니다.

abc
def
ghi

그러나 입력 echo $(cat myfile.txt)하면 다음을 볼 수 있습니다.

abc def ghi

이 방법은 별도의 새 줄이 있었던 공간을 삽입합니다. 이렇게하면 출력을 쉽게 읽을 수 있지만 질문 범위를 엄격하게 준수하지는 않습니다.


0

Bash를 사용하는 경우 외부 도구없이 수행 할 수 있습니다.

x=($(echo line1; echo line2))
echo "${x[@]}"

결과:

line1 line2

첫 번째 명령은 여러 줄 출력을 배열로 바꾸고 두 번째 명령은 배열을 한 줄에 여러 인수로 확장합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.