Python에서 CLI 명령을 사용하여 ps -au | awk '{print$1,$2,$3,$4,$7,$11}' | sed '1d'
다음 출력을 얻습니다.
root 669 0.0 0.0 tty1 /sbin/agetty
root 670 0.4 2.8 tty7 /usr/lib/xorg/Xorg
lothar 1573 0.0 0.0 pts/0 sh
lothar 1599 0.0 0.0 pts/0 /bin/bash
lothar 21130 0.0 0.1 pts/1 /usr/bin/bash
lothar 21140 0.0 0.1 pts/2 /usr/bin/bash
lothar 21146 0.0 0.1 pts/3 /usr/bin/bash
lothar 21230 0.0 0.1 pts/4 /usr/bin/bash
lothar 508386 0.0 0.0 pts/0 ps
lothar 508387 0.0 0.0 pts/0 [awk]
lothar 508388 0.0 0.0 pts/0 sed
그러나 이 명령 세트는 추가 \n
문자를 삽입합니다. Linux cli에서 tr을 사용하여 모두 삭제할 수 있다는 것을 알고 있지만 \n
마지막 항목만 삭제하면 됩니다.
이를 수행하는 가장 좋은 방법은 무엇입니까?
감사해요!
답변1
이러한 문제를 해결하는 간단한 도구가 있습니다.
truncate -s -1
하지만 먼저 후행 줄 바꿈이 있는지 확인하는 것이 좋습니다.
[ -z "$(tail -c1 file)" ] && truncate -s -1
답변2
마지막 개행 문자를 인쇄하지 않도록 awk에 지시할 수 있습니다. printf로 변환하면 첫 번째 문자열을 제외하고 문자열 앞에 개행만 인쇄합니다.
ps -au | awk '{if (NR > 1) { print "" }; printf("%s %s %s %s %s %s", $1,$2,$3,$4,$7,$11); }'
답변3
Bash에서는 이를 수행하는 방법이 많이 있습니다. 예를 들어 다음 명령을 파이프하십시오.
head -c-1
출력에서 마지막 바이트를 제거합니다.
답변4
이 "트릭" 솔루션이 지금 제가 생각할 수 있는 전부입니다. 다음 줄 바꿈 없이 무언가를 에코하기 때문에 작동하며 이 경우 해당 내용은 ps의 출력입니다.
echo -n "$(ps -au | awk '{print$1,$2,$3,$4,$7,$11}' | sed 1d |tail -n3)NONEWLINE"
산출:
balmora: ~/src/github.com/systemd/systemd
$ echo -n "$(ps -au | awk '{print$1,$2,$3,$4,$7,$11}' | sed 1d |tail -n3)NONEWLINE"
jaroslav 821201 0.0 0.0 pts/9 awk
jaroslav 821202 0.0 0.0 pts/9 sed
jaroslav 821203 0.0 0.0 pts/9 tailNONEWLINEbalmora: ~/src/github.com/systemd/systemd [main]