在linux中如何确定空白的确切字符?

在linux中如何确定空白的确切字符?,linux,shell,Linux,Shell,我正在尝试获取ps-aux的PID字段。我知道我可以使用ps-aux | awk'{print$2}'来实现这一点,但作为实践,我想看看是否可以使用cut命令来实现这一点。我的想法是指定一个分隔符并选择第二个字段,如下所示: ps -aux | cut -d[delimiter] -f2 使用空格作为分隔符(')不起作用,tab(\t)也不起作用 一般来说,如何在linux中找到空白的确切字符?要识别其他不可打印或类似外观的字符(如空白),请通过管道输出到工具,如xxd或od-c。例如,这将

我正在尝试获取
ps-aux
的PID字段。我知道我可以使用
ps-aux | awk'{print$2}'
来实现这一点,但作为实践,我想看看是否可以使用
cut
命令来实现这一点。我的想法是指定一个分隔符并选择第二个字段,如下所示:

 ps -aux | cut -d[delimiter] -f2
使用空格作为分隔符(
'
)不起作用,tab(
\t
)也不起作用


一般来说,如何在linux中找到空白的确切字符?

要识别其他不可打印或类似外观的字符(如空白),请通过管道输出到工具,如
xxd
od-c
。例如,这将输出每个字符的十六进制值以及文本,以便于查找:

ps -aux | xxd -g 1        # -g 1 outputs each character individually
然而,我认为您的问题在于
ps-aux
在字段之间使用多个空格
cut
不处理多个连续分隔符,因此它会打印第一个和第二个空格之间的任何内容,即无

如果确实要使用“剪切”,则必须删除前导空格和重复空格:

ps -aux | sed 's/^ *//;s/  */ /g' | cut -d' ' -f2

要获取
ps
命令的PID,可以执行以下操作:


ps-aux | cut-c10-15

cut不支持多字符作为定界。 如果确实要使用剪切,字段之间有多个空格:

ps aux | sed 's/  */ /g' | cut -d ' ' -f 2

参考信息:您在
ps aux
中使用的
u
表示,根据
man ps

u显示面向用户的格式

所以你明确地要求一个人类可读的输出,然后用某种工具解析它?那不太合适(至少可以说)。如果您需要格式化
ps
的输出,请使用
-o
(或
--format
)选项,前提是您的
ps
版本接受该选项。因此:

ps ax -o pid

会好得多。

谢谢,在浏览手册页之后,我刚刚找到了
-o
标志。我同意这是一种更好的做事方式。另一方面,我仍在尝试更熟悉linux命令,因此尝试以更难/更难看的方式完成任务并不有害,只是为了练习使用不同的命令。但这是危险的:一旦你知道一点如何使用管道,以及工具cut、awk、sed、head、tail等等,您将生成可怕的长管道链,您将解析不需要解析的输出,等等。。。(就像几乎所有人一样),这太可怕了。我相信从一开始就养成一个好习惯,知道如何高效、正确地做事。我的意思是,看看其他答案。。。没有人担心解析
ps
的输出:“哦,这很简单,先做一点剪切和一点盐sed,然后轻轻地插入awk和grep”<代码>:-(。好的观点。我同意弄乱管道和链接命令可能会产生坏习惯。我们将尝试学习正确的方法。非常感谢您的建议!