리디렉션된 출력에서 ​​개행을 제거하는 방법

리디렉션된 출력에서 ​​개행을 제거하는 방법

이와 같이 출력을 리디렉션하는 경우 개행 문자를 제거할 수 있나요?

echo "a" >> file

내 스크립트에는 모든 문자(숫자 제외)를 파일로 리디렉션하는 for 루프가 포함된 비슷한 내용이 있습니다. 하지만 내 목표는 이 출력을 한 줄에 넣는 것입니다. "a"를 10번 리디렉션했다고 가정하면 다음과 같습니다.

a a a a a a a a a a

그러나 그것은 다음과 같습니다:

a
a
a
a 
[etc.]

답변1

구체적으로 요청하는 경우 다음을 사용하여 개행을 억제 echo할 수 있습니다 -n.

$ echo -n "test" >> outputfile

파이프 또는 리디렉션된 데이터에서 줄 바꿈을 억제하는 방법을 보다 일반적으로 묻는 경우 다음 도구를 사용하세요.많은피부. 간단한 방법은 다음과 같습니다 tr.

$ do_stuff | tr -d "\n" >> outputfile

스크립팅과 데이터 출력을 막 시작했다면, 다음과 같이 echo정확하게 사용하는 습관을 버리는 것이 좋습니다 printf.

$ printf "test" >> outputfile

printf여러 가지 면에서, 여러 가지 이유로 우수합니다 echo. 그 중 가장 중요한 것은오직명시적으로 지시한 내용을 인쇄합니다(더 중요한 것은 원하는 형식으로 인쇄하는 것입니다).

답변2

나는 개행 문자를 제거하고 싶지 않고 공백으로 바꾸고 싶지 않다고 생각합니다.

for ((i=0; i<10; ++i)); do
    echo a
done | tr '\n' ' ' >file

이는 출력을 사후 처리 echo하고 데이터를 저장합니다 file(이미 존재하는 경우 먼저 자릅니다).

아니면 좀 더 이국적인 일을 해보세요 bash.

for ((i=0; i<10; ++i)); do
    array+=( "a" )
done

printf '%s\n' "${array[*]}" >file

이는 행이 마지막 개행 문자로 적절하게 끝나는 반면 배열의 모든 요소는 $IFS공백(의 첫 번째 문자)으로 구분된다는 장점이 있습니다.

또는 다음을 사용하여 /bin/sh:

i=0
set --
while [ "$i" -lt 10 ]; do
    set -- "$@" "a"
    i=$(( i + 1 ))
done

printf '%s\n' "$*" >file

답변3

for i in `seq 1 10`; do
  printf "a " >> file
done

그러면 문제가 해결될 것입니다.

관련 정보