다음 명령을 실행했습니다.
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
에도 이 작업을 수행할 수 있습니다.date
N
~ 할 것이다그 사이에 개행 문자를 넣으세요):
$ ( 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는 단일 "@"를 "@@"로 바꿉니다.