【问题标题】:Finding an exact match in QNX without using grep -w在不使用 grep -w 的情况下在 QNX 中查找完全匹配
【发布时间】:2017-12-31 20:44:48
【问题描述】:

我正在编写一个脚本,它需要在与 QNX 和 POSIX 兼容的 Linux 兼容的文件中找到完全匹配的文件

更多细节:

我试图找到一个进程的用户,所以我写的原始命令是

user=$(ps -aux | awk '{print $1 " " $2}' | grep -w ${process} | awk '{}print $1')

在兼容 POSIX 的 Linux 中完美运行

但是,QNX 并不完全符合 POSIX,grep -w 不适用于我的目标...所以我需要找到没有grep -w 的完全匹配

【问题讨论】:

  • 我相信awk 的一次调用可以完成您希望使用awk ... | grep ... | awk ... 实现的任何目标,这几乎总是一个糟糕的结构。请显示您的ps 的示例输出,并说明哪些部分需要匹配。如果您的 3 个 qnx 标记为 awk,也可以考虑替换一个。
  • 所以我的目标是让进程的用户获得进程 ID,因此我必须从 ps -aux 命令中删除所有垃圾值,这是第一个 awk 的用途(我 awk仅用于 ID 和用户名,并删除所有其他可能搞砸以下 grep -w 的数字)然后我 grep -w ID(我需要确切的 ID,因为您可以拥有 11 和 1112 的 ID,常规 grep 将同时拉动两者)然后我只找出保存到变量中的用户名...也感谢标签上的提示
  • 是的,使用单个 awk 和诸如 awk '/\<PROCESSID\>/ {do something}' 之类的单词分隔符
  • @MarkSetchell – \<\> 字边界字符仅适用于 GNU awk (gawk),如果 GNU grep 不可用,我怀疑 QNX 上是否可用,但你可以这样做ps -aux |awk '$2=="'$process'"{print $1}'
  • 另外,我很确定你可以使用ps u $process |awk 'NR>1{print $1}',但我不知道 QNX 的 ps 选项。

标签: linux shell awk qnx qnx-neutrino


【解决方案1】:

如果字段 2 完全匹配某些内容,我认为您想打印字段 1:

ps -aux | awk -v p=$process '$2==p{print $1}'

【讨论】:

    【解决方案2】:

    -w 不是 grep 的有效 POSIX 选项,不应将其用于应该在 POSIX 系统之间可移植的应用程序。总是可以 ps -p $1 -o user= 吗?如果用户可能与进程 id 相同,您将如何处理 grep 和 awk?

    【讨论】:

    • 谢谢,老实说,我假设 -w 是 posix,因为它是 grep ......我也计划不让用户像 ID 这样的数字字符串,所以我忽略了它的可能性。 .. 但我只是要发出一个警告,如果发生这种情况就会弹出(这只被工程师使用,所以如果发生这种情况他们可以处理边缘情况)
    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多