Hi,
by doing a
ps aux | grep UserName
The output do not keep the LF[1] 😡
I’ve found some solution online by they involve 3 or more pipe |
!
On my side, I’ve made this
ps -fp $(pgrep -d, -u UserName)
But still I found it not super human readable.
Is their a native way with ps
to filter users ? or to grep
it but the keep the LF ?
tbh you should prolly use pgrep instead of piping ps into grep
ps
outputs a newline after every entry. What are you trying to accomplish?Do you have a username that contains a newline character? If so… why?!
Security by overcomplication
Kinda hard to encode it in
/etc/passwd
, which separates entries with newlines and fields of an entry with colons.Of course, you can activate some alternative user database in
/etc/nsswitch.conf
and then you can have your usernames with newlines in them, but at least half of the tools on your system that process usernames will take that personally…
If I do
ps aux | grep root
, then the newline is preserved. So I’m not sure what exactly the problem is. There is a user option for ps, but it does not work with aux,ps --user root
. You canps ax --user root
, but I’m not sure if this output is what you want.Btw if you grep, then I recommend using
^user
, so it only matches the beginning of each line (the actual username), asps aux | \grep ^root
(notice the backslash). Do you have an alias for grep? Try\grep
instead. The backslash in front of the command will use the actual command and ignore your alias.Here is a little bonus to have in mind: You can convert newline characters to null, then grep with option null, and at last convert null characters back to newline. Now I don’t think its useful in this case, but its good to know; therefore its a bonus information:
ps aux | tr '\n' '\0' | \grep --null-data ^root | tr '\0' '\n'
what do you mean the output doesnt keep the LF? what LF?
ps also has -u and -U switches to filter by users
I’m not really sure what it is you’re asking for here. As another commenter said,
ps
outputs a list of newline separated entries (using\n
, the standard LF character). I even ran some sanity checks to make sure it wasn’t using\r\n
(CR LF) with the following:$ ps aux | grep $USER | tr -cd "\n" | wc -m 14 $ ps aux | grep $USER | tr -cd "\r" | wc -m 0
The output of
ps aux | grep $USER
is consistent with the formatting ofps aux
. I also found thatps aux | grep $USER
was consistent withps -fp $(pgrep -d, -u $USER)
except thatps -fp $(pgrep -d, -u $USER)
shows the header (UID PID PPID C STIME TTY TIME CMD
), does not show the processes related to the command (entries ofps aux
andgrep --color=auto $USER
), and does not show grep’s keyword matching by highlighting all matches within a line. It is otherwise completely identical.Can you provide the output that you are getting that is unsatisfactory to you? I don’t think I can otherwise understand where the issue is.