找到给定字符串后检索字符串“PWD”的后续出现

找到给定字符串后检索字符串“PWD”的后续出现

下面是我的示例 test.log 文件

export SQRDIR=/v/orahome/Middleware/Oracle/bin64


 
export OID=ap0092

export PWD=pass1

export FDPWD=pass1

export AP0085_PWD=pass1

export SVR=AFFPROD

export TWO_TASK=db01

 

export EF_OID=AP0093

export EF_PWD=pass2

 

export CCC_PER_OID=CCC_JAS

export CCC_PER_PWD=pass3

 

export CAN_PER_OID=CAN_JAS

export CAN_PER_PWD=pass4

 

###################################################

用户输入ap0092.在此输入后,我需要在搜索字符串第一次出现后搜索 PWD 的第一次出现,即=ap0092

因此,所需的输出将是pass1

同样,对于CCC_JAS所需的输出将是pass3

我需要 Solaris 操作系统的解决方案。

我正在grep -A 1[对于非 Solaris] 获取下一行,但不知道如何搜索所需的行是否不是下一行。

export OID=ap0092请注意:和之间可能有多条线或白线

export PWD=pass1

请建议。

答案1

可能:

#! /bin/sh -
oid="${1?No OID specified}"
file=/path/to/your/file.log

die() {
  printf>&2 '%s\n' "$@"
  exit 1
}

password=$(
  OID=$oid perl -ne '
    if (/^export (\w+_)?OID=(.*)$/) {
      $prefix = $1 if $right_oid = $2 eq $ENV{OID};
    } elsif ($right_oid && /^export ${prefix}PWD=(.*)$/) {
      print "$1\n"; $found = 1; exit
    }
    END {exit !$found}' < "$file"
) || die "No password found for $oid"

printf '%s\n' "The password for $oid is $password"

如果在 Solaris 10 或更早版本上,请替换#! /bin/sh#! /usr/xpg4/bin/sh#! /bin/ksh,因为/bin/sh当时不是 POSIX shell,但仍在旧的 SysV shell 上。

相关内容