如何从linux命令返回子字符串

如何从linux命令返回子字符串,linux,aix,Linux,Aix,我正在连接一个exadata,希望获取其中“ORACLE_HOME”变量的信息。所以我使用这个命令: ls -l /proc/<pid>/cwd 我将在不同的机器上多次使用此命令。那么如何从整个输出中得到这个子字符串呢 Awk和grep对这类问题很有用 新的: ls-l/proc//cwd | awk{print($NF)}| sed's#/dbs/# 旧的: ls-l/proc//cwd | awk'{print($NF)}'| egrep-o'^.+[0-9]' Awk打印

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

ls -l /proc/<pid>/cwd

我将在不同的机器上多次使用此命令。那么如何从整个输出中得到这个子字符串呢

Awk和grep对这类问题很有用

新的:

ls-l/proc//cwd | awk{print($NF)}| sed's#/dbs/#
旧的:

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

Awk打印输入的最后一列,即ls命令,然后grep获取该字符串的开头以及最后出现的数字和点。这是一种情景解决方案,可能不是最好的。

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

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

这是一个很好的答案。但正如你在问题中看到的,我不想要最后一个专栏的全部内容。那么你的解决方案是什么?还有,如果我想得到第二个专栏呢?谢谢你的努力。实际上,这在Linux中是有效的,但当我在AIX机器上尝试时,它不知道“egrep”中的“-o”参数。在AIX中是否有与之相同的东西?
/u01/app/database/11.2.0  (i dont want the "/dbs/" there)
ls -l /proc/<pid>/cwd | awk '{print ($NF) }' | sed 's#/dbs/##'
ls -l /proc/<pid>/cwd | awk '{print ($NF) }' | egrep -o '^.+[.0-9]'
dirname $(readlink -f /proc/<pid>/cwd)