如何去掉最后的\n?

如何去掉最后的\n?

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

相关内容