programing

Bash: 출력에서 후행 줄 바꿈 제거

mailnote 2023. 5. 1. 21:42
반응형

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)"

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

파일 끝에서 여러 줄의 새 문자를 제거하려면 cmd 대체를 다시 사용합니다.

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

파일에서 마지막 줄 문자를 엄격하게 제거하려면 Perl:

perl -pe 'chomp if eof' log.txt

삭제할 줄바꿈 문자가 있는 것이 확실한 경우 다음을 사용할 수 있습니다.headGNU 코어유틸리티에서 마지막 바이트를 제외한 모든 항목을 선택합니다.이 작업은 매우 빨라야 합니다.

head -c -1 log.txt

또한 완전성을 위해 다음을 사용하여 새 줄(또는 다른 특수 문자)이 파일에서 어디에 있는지 빠르게 확인할 수 있습니다.cat그리고 '쇼-올' 깃발.-A달러 기호 문자는 각 줄의 끝을 나타냅니다.

cat -A log.txt

한 가지 방법:

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

마지막선만 제거하려면 다음을 통과합니다.

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

sed추가하지 않음\0구분 기호가 다음으로 설정된 경우 스트림 끝으로 이동합니다.NUL경유로-z반면에 POSIX 텍스트 파일을 만듭니다. (끝 부분에 정의됨).\n), 항상 최종 결과를 출력합니다.\n없이.-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 변수 대체에서 빈 공간 제거를 직접 지원합니다.

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

Bash에서 엔드 오브 라인 없이 출력을 인쇄하려면 다음과 같이 에코합니다.-n스위치를 켜다

변수에 이미 변수가 있는 경우 다음 줄이 잘린 상태로 반향합니다.

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

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

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

출력을 변수에 할당하면,bash자동으로 빈 공간 제거:

linecount=`wc -l < log.txt`

printf는 이미 다음 줄을 잘라냅니다.

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

세부 정보:

  • printf는 당신의 콘텐츠를 대신 인쇄할 것입니다.%s문자열 자리 표시자.
  • 라인을 새로 인쇄하라고 하지 않으면 (%s\n), 그렇지 않을 것입니다.

다른 무엇보다 참고를 위해 이것을 추가하는 것 ^_^

bash 확장 마법을 사용하여 출력에서 새 라인을 제거할 수도 있습니다.

VAR=$'helloworld\n'

CLEANED="${VAR%$'\n'}"

echo "${CLEANED}"

Awk 사용:

awk -v ORS="" '1' log.txt 

설명:

  1. -V ORS 할당
  2. ORS - 출력 레코드 구분 기호가 공백으로 설정됨.새 줄(입력 레코드 구분 기호)을 ""로 대체합니다.

언급URL : https://stackoverflow.com/questions/12524308/bash-strip-trailing-linebreak-from-output

반응형