[bash] 배쉬 : 출력에서 ​​후행 줄 바꿈

Bash (또는 특정 wc -l < log.txt) 명령을 실행 하면 출력 뒤에 줄 바꿈이 포함됩니다. 어떻게 제거합니까?



답변

예상 출력이 한 줄이면 출력에서 ​​모든 개행 문자를 간단히 제거 할 수 있습니다. ‘tr’유틸리티 또는 선호하는 경우 Perl로 파이프하는 것은 드문 일이 아닙니다.

wc -l < log.txt | tr -d '\n'

wc -l < log.txt | perl -pe 'chomp'

명령 대체를 사용하여 후행 줄 바꿈을 제거 할 수도 있습니다.

echo -n "$(wc -l < log.txt)"

printf "%s" "$(wc -l < log.txt)"

승인 된 답변을 선택하기로 한 OP의 결정에 동의하지 않습니다. 가능한 경우 ‘xargs’를 사용하지 않아야한다고 생각합니다. 예, 멋진 장난감입니다. 아니요, 여기 필요하지 않습니다.


예상 출력에 여러 줄이 포함될 수있는 경우 다른 결정을 내려야합니다.

파일 끝에서 MULTIPLE 개행 문자를 제거하려면 cmd 대체를 다시 사용하십시오.

printf "%s" "$(< log.txt)"

파일에서 마지막 개행 문자를 엄격하게 제거하려면 Perl을 사용하십시오.

perl -pe 'chomp if eof' log.txt


제거하려는 후행 줄 바꿈 문자가 확실하다면 GNU coreutils에서 ‘head’를 사용하여 마지막 바이트를 제외한 모든 것을 선택할 수 있습니다. 이것은 매우 빠릅니다.

head -c -1 log.txt

또한 완전성을 위해 ‘cat’및 ‘show-all’플래그를 사용하여 줄 바꿈 (또는 기타 특수 문자)이 파일에서 어디에 있는지 신속하게 확인할 수 있습니다. 달러 기호 문자는 각 줄의 끝을 나타냅니다.

cat -A log.txt


답변

일방 통행:

wc -l < log.txt | xargs echo -n


답변

Bash 변수 대체 에서 공백 제거를 직접 지원합니다 .

testvar=$(wc -l < log.txt)
trailing_space_removed=${testvar%%[[:space:]]}
leading_space_removed=${testvar##[[:space:]]}


답변

출력을 변수에 할당하면 bash공백이 자동으로 제거됩니다.

linecount=`wc -l < log.txt`


답변

printf는 이미 후행 줄 바꿈을 자릅니다.

$ printf '%s' $(wc -l < log.txt)

세부 묘사:

  • printf는 %s문자열 자리 표시 자 대신 내용을 인쇄합니다 .
  • 줄 바꿈 ( %s\n) 을 인쇄하도록 지시하지 않으면 그렇지 않습니다.

답변

마지막 개행 만 제거 하려면 다음을 통해 파이프하십시오.

sed -z '$ s/\n$//'

sed\0구분 기호가 NULvia 로 설정된 경우 스트림 끝에 a 를 추가하지 않고 -zPOSIX 텍스트 파일 (a로 끝나도록 정의 됨)을 만들려면 \n항상을 사용 \n하지 않고 final 을 출력합니다 -z.

예 :

$ { echo foo; echo bar; } | sed -z '$ s/\n$//'; echo tender
foo
bartender

그리고 NUL추가 되지 않음을 증명하기 위해 :

$ { echo foo; echo bar; } | sed -z '$ s/\n$//' | xxd
00000000: 666f 6f0a 6261 72                        foo.bar

후행 줄 바꿈을 여러 개 제거 하려면 다음을 통해 파이프하십시오.

sed -Ez '$ s/\n+$//'


답변

줄 끝없이 Bash에서 출력물을 출력하려면 -n스위치를 사용하여 출력하십시오 .

변수에 변수가 있다면, 줄 바꿈 줄 바꿈으로 에코하십시오 .

    $ testvar=$(wc -l < log.txt)
    $ echo -n $testvar

또는 한 줄로 대신 할 수 있습니다.

    $ echo -n $(wc -l < log.txt)