【问题标题】:how can i extract a string or pattern from a result set如何从结果集中提取字符串或模式
【发布时间】: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

标签: linux bash awk sed grep


【解决方案1】:

您可以使用awk

$DOMAIN_HOME/reports/bin/rwdiag.sh -findall | awk -F' ' $'{print $2,$3,$4}' 

使用此命令,您可以将字符串用作由空格分隔的列表(使用 -F 定义)。

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2015-06-14
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多