在 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]