我读过很多不同的人试图做类似的事情(使用sed/awk/grep之类的工具),我试着阅读docs来构建我自己的.但我没能做我认为相对容易的判断。
我正在解析一些netstat输出,并隔离PID。
我知道多个PID可以使用一个连接,但我也知道,我所隔离的特定类型的连接将是特定服务上的单个用户。
我正在编辑的数据的最小示例:
users:((sshd,pid=1762,fd=5))
我试图隔离:
pid=1762
我打算使用(作为一个例子):
echo "users:(("sshd",pid=1762,fd=5))"| sed "s/users:((//" | sed "s/))//"| cut -d "," -f2
这正是我想要的..。但我只知道这不是个好办法。有人能帮我一下吗?)
发布于 2020-08-02 01:16:47
Jetchisel's comment建议使用awk的字段分隔符选项:
echo 'users:((sshd,pid=1762,fd=5))' | sed 's/^.*sshd,//;s/,fd=.*$//'或echo 'users:((sshd,pid=1762,fd=5))' | awk -F, '{print $2}'
这件事很好用。
发布于 2020-08-02 04:20:08
对于上面的任务,不需要运行单独的命令来提取pid组件。您可以使用bash内置对模式或regex的支持。优点是不需要运行单独的进程--如果要处理大量的输入行,则运行速度要快得多。
V='users:((sshd,pid=1762,fd=5))'
# Using Pattern
IFS=, read x1 x_pid x3 <<< "$V"
echo "$x_pid"或使用REGEX
V='users:((sshd,pid=1762,fd=5))'
[[ "$V" =~ ,(pid=[0-9]+), ]] && x_pid=${BASH_REMATCH[1]}
echo "$x_pid"发布于 2020-08-02 17:01:43
echo "users:((sshd,pid=1762,fd=5))" | cut -d',' -f2
echo "users:((sshd,pid=1762,fd=5))" | grep -o "pid=[0-9]*"虽然我认为-o是一个GNU扩展,但后者似乎也能工作,因此它可能不是可移植的。
https://stackoverflow.com/questions/63211361
复制相似问题