我正在使用名称awk来获取pid特定进程.
#!/bin/sh
for pid in $(ps | awk '$4 == "foo" { print $1 }')
do
i=1
echo "killing foo at pid $pid"
kill $pid && echo 'ok' || echo 'failed'
done
Run Code Online (Sandbox Code Playgroud)
psOSX 上的输出是这样的:
$ ps
PID TTY TIME CMD
1858 ttys000 0:00.15 -bash
4148 ttys000 0:01.37 /a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
但是我的shell脚本只有在CMD列中的进程完全foo没有绝对路径时才有效.
我想我可以使用basename,但我怎么称它为awk?
或者
有什么样$4.endswith('foo')的awk?
awk可以使用正则表达式.所以不是$4 == "foo",你可以这样做:
awk '$4 ~ /\/foo$/ { print $1 }'
Run Code Online (Sandbox Code Playgroud)
正则表达式位于/和之间/.\/foo$他说:"foo之后是反斜杠,然后是场地的结束." 在这种情况下,您的字段是/a/b/c/foo,因此它将匹配.