답변:
예상 출력이 한 줄이면 출력에서 모든 개행 문자를 간단히 제거 할 수 있습니다. '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
tr --delete '\n'
줍니다.
| tr -d '\r'
일방 통행:
wc -l < log.txt | xargs echo -n
echo -n `wc -l log.txt`
IFS
) 한 공간 으로 압축합니다 . 예 : echo "a b" | xargs echo -n
; echo -n $(echo "a b")
. 유스 케이스에 문제가 될 수도 있고 아닐 수도 있습니다.
-e
하면에 대한 옵션으로 해석됩니다 echo
. 사용하는 것이 항상 더 안전합니다 printf '%s'
.
xargs
시스템에서 속도가 매우 느리며 (다른 시스템에도 있다고 생각합니다) 일반적으로 내장되어 있기 때문에 printf '%s' $(wc -l log.txt)
더 빠를 수 있습니다 printf
(정보 리디렉션이 없기 때문에). 백틱을 사용하지 마십시오. 최신 POSIX 버전에서는 더 이상 사용되지 않으며 수많은 단점이 있습니다.
Bash 변수 대체 에서 공백 제거를 직접 지원합니다 .
testvar=$(wc -l < log.txt)
trailing_space_removed=${testvar%%[[:space:]]}
leading_space_removed=${testvar##[[:space:]]}
trailing_linebreak_removed=${testvar%?}
출력을 변수에 할당하면 bash
공백이 자동으로 제거됩니다.
linecount=`wc -l < log.txt`
printf는 이미 후행 줄 바꿈을 자릅니다.
$ printf '%s' $(wc -l < log.txt)
세부 묘사:
%s
문자열 자리 표시 자 대신 내용을 인쇄합니다 . %s\n
) 을 인쇄하도록 지시하지 않으면 그렇지 않습니다."$(command)"
내부 줄 바꿈이 유지되고 후행 줄 바꿈 만 제거됩니다. 쉘은 여기서 모든 작업을 수행하고있다 . printf
명령 대체 결과를 다시 지시하는 방법 일 뿐이다 stdout
.
$( )
구문을 사용하여 수행하는 쉘입니다 . 증거는 다음과 같습니다.printf "%s" "$(perl -e 'print "\n"')"
$ printf '%s' "$(wc -l < log.txt)"
마지막 개행 만 제거 하려면 다음을 통해 파이프하십시오.
sed -z '$ s/\n$//'
sed
\0
구분 기호가 NUL
via 로 설정된 경우 스트림 끝에 a 를 추가하지 않고 -z
POSIX 텍스트 파일 (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+$//'
sed
은 제공하지 않습니다 -z
.
줄 끝없이 Bash에서 출력물을 출력하려면 -n
스위치를 사용하여 출력하십시오 .
변수에 변수가 있다면, 줄 바꿈 줄 바꿈으로 에코하십시오 .
$ testvar=$(wc -l < log.txt)
$ echo -n $testvar
또는 한 줄로 대신 할 수 있습니다.
$ echo -n $(wc -l < log.txt)
echo -n $(wc -l < log.txt)
같은 효과가 있습니다.