【发布时间】:2020-07-11 09:01:52
【问题描述】:
我包含了一个 oracle 命令
$DOMAIN_HOME/reports/bin/rwdiag.sh -findall
在一个 linux 脚本中检查我们的环境并在下面返回一个示例输出
- (1) 名称 = rep_wls_reports_orclas4t:类型 = 服务器:主机 =
- (2) 名称 = rep_wls_reports_ias10t_frasinst_1:类型 = 服务器:主机 =
- (3) 名称 = rptsvr_orclas5p_frasinst_1:类型 = 服务器:主机 =
- ...
(可在我们的 ERP 中使用的现有报表服务器列表)
我正在尝试仅提取 **Name = rep****** 部分并仅在我的输出中报告该部分。我如何使用 sed 和/或 grep 来实现这一点。
非常感谢您的帮助。
问候
【问题讨论】:
-
我不确定我是否完全理解您想要的输出。您能否在问题中给出您的实际输入和期望输出的具体示例?
-
你的意思是像
grep -o 'Name\s=\s[^:]*' file? (或rwdiag.sh -findall | grep -o 'Name\s=\s[^:]*')或者,如果你还想要"Name"之前的(1)..,你可以简单地使用grep -o '^[^:]*' -
谢谢大家。问题是我得到 2 个不同的结果集 - 结果集 1) (1) 名称 = rep_wls_reports_orclas4t:类型 = 服务器:主机 = xxxxxxxxx。结果集 2) (1) rep_wls_reports_orclas7d:类型 = 服务器:主机 = NA。使用 awk 不会涵盖这两种情况,因为我不知道 2 美元是多少。 @DavidC.Rankin 工作但输出不一致。是否有一个通用的 gred/sed 可以用来提取“rep_xxxxx”?
-
嗯,结果应该是一致的。第一个(较长的)命令从开头删除
(x).,而grep -o '^[^:]*'命令只是从开头读取到第一个':'。这两个单独命令的结果是不同的,但使用任何一个都应该提供一致的结果。 -
为此,我会使用
sed 's/^.*Name\s=\s\(\w\w*\).*$/\1/' file,例如rep_wls_reports_ias10t_frasinst_1