从剪切操作中正确定位所需字段

从剪切操作中正确定位所需字段

我正在运行这样的进程

me   26175  1.7  2.5 1483984 100148 tty2   Sl+  12:49   0:04 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat
me   26237  0.0  0.7 311516 29176 tty2     S+   12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=zygote --no-sandbox
me   26276  0.2  2.0 550496 81800 tty2     Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=gpu-process --channel=26175.0.1924433599 --mojo-application-channel-token=3E65B226573BBE452FCCE4212BC242ED --no-sandbox --window-depth=24 --x11-visual-id=33 --supports-dual-gpus=false --gpu-driver-bug-workarounds=5,18,56 --gpu-vendor-id=0x0000 --gpu-device-id=0x0000 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
me   26284  0.2  3.8 1085556 150812 tty2   Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=renderer --no-sandbox --primordial-pipe-token=85EEA61A3C800C4096858B6AE571B4EB --lang=en-US --node-integration=true --enable-pinch --num-raster-threads=2 --content-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --video-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --disable-accelerated-video-decode --mojo-channel-token=F13ADFBA9E2E351C09B10692D10BCFBE --mojo-application-channel-token=85EEA61A3C800C4096858B6AE571B4EB --channel=26175.1.78915562 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd

我希望使用cutgwak 等高级工具来获取列 pid

 ps -aux | grep wechat | sed "s/$USER/me/g" | cut -f 2 | head -n 4 
me   26175  1.2  2.5 1483984 100220 tty2   Sl+  12:49   0:05 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat
me   26237  0.0  0.7 311516 29176 tty2     S+   12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=zygote --no-sandbox
me   26276  0.1  2.0 550496 81800 tty2     Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=gpu-process --channel=26175.0.1924433599 --mojo-application-channel-token=3E65B226573BBE452FCCE4212BC242ED --no-sandbox --window-depth=24 --x11-visual-id=33 --supports-dual-gpus=false --gpu-driver-bug-workarounds=5,18,56 --gpu-vendor-id=0x0000 --gpu-device-id=0x0000 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
me   26284  0.1  3.8 1085556 150812 tty2   Sl+  12:49   0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=renderer --no-sandbox --primordial-pipe-token=85EEA61A3C800C4096858B6AE571B4EB --lang=en-US --node-integration=true --enable-pinch --num-raster-threads=2 --content-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --video-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --disable-accelerated-video-decode --mojo-channel-token=F13ADFBA9E2E351C09B10692D10BCFBE --mojo-application-channel-token=85EEA61A3C800C4096858B6AE571B4EB --channel=26175.1.78915562 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd

它得出结论,输出不是由制表符分隔的,然后尝试使用空格

me@host:~$ ps -aux | grep wechat | sed "s/$USER/me/g" | cut -d ' ' -f 2 | head -n 4 




me@host:~$ 

但是得到了大量的空格,并且 pid 神秘地位于字段 4 中

me@host:~$ ps -aux | grep wechat | sed "s/$USER/me/g" | cut -d ' ' -f 4 | head -n 4 
26175
26237
26276
26284
me@host~$ 

我在这里非常困惑,如果不进行“反复试验”,我怎么能决定要切割哪个领域呢?

答案1

您不必使用cutawk根本。grep也是不建议与ps因为没有正确创建的grep查询也会将其自身包含在输出中。

pgrep如果您只对 PID 感兴趣,实用程序可以完成这项工作。

$ pgrep -f wechat 
8096
8115

如果您对其他信息感兴趣,ps实用程序接受它应在选项中输出的列的列表-opgrep是一个用于按名称查找进程的实用程序。因此,我个人经常这样做:

pgrep -f wechat | xargs -I{} ps  -o pid,ppid,user -p {}

pgrep实用程序将查找wechat在其命令行中任何地方包含的进程。xargs将传递输出(PID)ps并将它们放置到-p标志。-I将指定要使用的令牌以及应在命令中放置输出的位置。

$     pgrep -f wechat | xargs -I{} ps  -o pid,ppid,user -p {}
  PID  PPID USER
 8096  6825 root
  PID  PPID USER
 8115  8096 root

还可以--no-header选择删除列名

$ pgrep -f wechat | xargs -I{} ps  -o pid,ppid,user --no-header  -p {}
 8096  6825 root
 8115  8096 root

如果你只想查看electronic-wechat命令,你可能只想使用pgrep electronic-wechat 而不使用-f

另请参阅man ps,特别是“标准格式说明符”部分,了解您可以传递给的可用列的列表-o


如果你有兴趣观看持续处理这些进程,那么您可以考虑使用top带有过滤器的命令。您可以通过o键设置一个过滤器,通过Ctrl+查看您设置的过滤器o,并使用键重置过滤器。下面是我设置过滤器后的屏幕截图,该过滤器用++显示Ctrlo

在此处输入图片描述

相关内容