【问题标题】:How to return substring from a linux command如何从 linux 命令返回子字符串
【发布时间】:2014-03-12 13:14:40
【问题描述】:

我正在连接到 exadata,并希望在其中获取有关“ORACLE_HOME”变量的信息。所以我正在使用这个命令:

ls -l /proc/<pid>/cwd

这是输出:

2 oracle   oinstall          0 Jan 23 21:20 /proc/<pid>/cwd -> /u01/app/database/11.2.0/dbs/

我需要得到最后一部分:

/u01/app/database/11.2.0  (i dont want the "/dbs/" there)

我将在不同的机器上多次使用这个命令。那么我怎样才能从整个输出中获取这个子字符串呢?

【问题讨论】:

    标签: linux aix


    【解决方案1】:

    Awk 和 grep 非常适合这类问题。

    新:

    ls -l /proc/<pid>/cwd | awk '{print ($NF) }' | sed 's#/dbs/##'
    

    旧:

    ls -l /proc/<pid>/cwd | awk '{print ($NF) }' | egrep -o '^.+[.0-9]'
    

    Awk 打印输入的最后一列,即您的 ls 命令,然后 grep 抓取该字符串的开头,直到最后出现的数字和点。这是一个情境解决方案,也许不是最好的。

    【讨论】:

    • 这是一个很好的答案。但是正如您在问题中看到的那样,我不想要整个最后一列。那么您对此有何解决方案?另外,例如,如果我想获得第二列怎么办?
    • 感谢您的努力。实际上,这在 Linux 中有效,但是当我在 AIX 机器上尝试时,它不知道“egrep”中的“-o”参数。在 AIX 中是否有与此相同的东西?
    【解决方案2】:

    解析ls 的输出通常被认为是次优的。我会使用更像这样的东西:

    dirname $(readlink -f /proc/<pid>/cwd)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2019-04-23
      • 1970-01-01
      相关资源
      最近更新 更多