구분 기호를 사용하여 두 줄을 한 줄로 묶는 방법

구분 기호를 사용하여 두 줄을 한 줄로 묶는 방법

다음 명령을 실행했습니다.

cat /proc/loadavg && date

실제 결과:

0.00 0.00 0.00 1/803 26256
Fri Aug 26 09:00:56 EEST 2016

예상되는 결과:

0.00 0.00 0.00 1/803 26256 @@ Fri Aug 26 09:00:56 EEST 2016

나는 성공 sed하지 않고 이것을 시도했습니다 tr.

cat /proc/loadavg && date | sed 's/\n/ @@ /g'

cat /proc/loadavg && date | tr '\n' ' @@ '

내가 무엇을 놓치고 있는 걸까요?

답변1

가장 좋은 방법은 을 사용하는 것입니다 printf. 두 개의 문자열이 있고 이를 추가 형식으로 출력하려고 합니다. 정확히 printf.

$ printf "%s @@ %s\n" "$(cat /proc/loadavg)" "$(date)"

수정했기 tr때문에 시도가 유효하지 않습니다 .tr수치, 말이 아닙니다. 그러나 이를 사용하여 개행 문자를 하나의 문자로 바꿀 수 있습니다.

$ ( cat /proc/loadavg; date ) | tr '\n' '@'

...하지만 필요한 기능을 제대로 수행하지 못합니다.

sed입력에서 개행 문자가 제거되었기 때문에 귀하의 시도는 작동하지 않습니다 sed(즉, sed -n '/\n/p' inputfile아무것도 인쇄되지 않습니다).

첫 번째 줄(from)을 편집하는 동안 편집 명령을 사용하여 두 번째 줄(from)을 읽는 경우 sed에도 이 작업을 수행할 수 있습니다.dateN~ 할 것이다그 사이에 개행 문자를 넣으세요):

$ ( cat /proc/loadavg; date ) | sed 'N;s/\n/ @@ /'

...하지만 저는 개인적으로 이 printf솔루션을 선호합니다.

답변2

다음을 수행할 수 있습니다.

echo `cat /proc/loadavg` @@ `date`

답변3

이와 같이:

( cat /proc/loadavg && date ) | sed 'N; s/\n/ @@ /'

|첫째, 파이프는 두 명령이 아닌 에서만 작동하므로 시도가 작동하지 않습니다 date. 이 문제를 해결하려면 cat ... && date서브셸에서 실행한 다음 서브셸의 stdout.

tr '\n' ' @@ '한 문자를 여러 문자로 바꿀 수 없기 때문에 작동하지 않습니다 .

한 번에 하나의 행만 볼 수 있기 때문에 작동 sed 's/\n/ @@ /g'하지 않습니다 . sed줄 바꿈을 표시하려면 두 줄의 입력을 동일한 버퍼에 병합해야 합니다. 이것이 N위의 작업입니다.

답변4

그냥 뭔가 다른 이유로...

(cat /proc/loadavg && date) | paste -d@ - - | sed 's/@/ @@ /' 

paste -d@ - -"@"를 사이에 두고 두 줄을 나란히 붙여넣습니다. 그런 다음 sed는 단일 "@"를 "@@"로 바꿉니다.

관련 정보