2014-02-27 94 views
0

我正在处理日志存档脚本。需要从包含路径的变量中获取字符串

我有一台机器三个目录

/opt/tibco/run/tibbpma/tibcohost/BPM_DEV_TIBBPMA_HOST_01/host/logs 
    /opt/tibco/run/tibbpmb/tibcohost/BPM_DEV_TIBBPMB_HOST_01/host/logs 
    /opt/tibco/run/tibbpmc/tibcohost/BPM_DEV_TIBBPMC_HOST_01/host/logs 

脚本去每个目录与循环并找到所有与模式.LOG日志。和移动与日期附加到一个公共目录中的文件下/opt/tibco/scripts/logs/archive

日志名称下3个/opt/tibco/run/*/*/*/logs目录有时相同,在移动时彼此被覆盖。所以为了避免覆盖,我想添加tibbpma_BPM_DEV_TIBBPMA_HOST_01_到文件名有不同的文件名。

请帮助我们取得了tibbpma_BPM_DEV_TIBBPMA_HOST_01_tibbpmb_BPM_DEV_TIBBPMB_HOST_01_tibbpmc_BPM_DEV_TIBBPMC_HOST_01_

+0

我的脚本应该是通用的,并且应该处理任何目录而不考虑环境。/opt/tibco/run/tibbma/tibco/BPM_ITG_TIBBPMA_HOST_01/host/logs /opt/tibco/run/tibbpmb/tibcohost/BPM_ITG_TIBBPMB_HOST_01/host/logs /opt/tibco/run/tibbpmc/tibcohost/BPM_ITG_TIBBPMC_HOST_01 /主机/日志/选择/ TIBCO /运行/ tibbpma/tibcohost/BPM_STG_TIBBPMA_HOST_01 /主机/日志 的/ opt/TIBCO /运行/ tibbpmb/tibcohost/BPM_STG_TIBBPMB_HOST_01 /主机/日志 的/ opt/TIBCO /运行/ tibbpmc/tibcohost/BPM_STG_TIBBPMC_HOST_01 /主机/日志。这些路径是不同的机器 – user1658369

+0

是否有可能使用字符串tibbpm进行搜索,如果它存在,获取第4个和第6个由/ – user1658369

回答

0

您可以使用此grep -o -P 'BPM[^/]+'从这些路径中提取所需的部件,例如

$ echo /opt/tibco/run/tibbpma/tibcohost/BPM_DEV_TIBBPMA_HOST_01/host/logs | grep -o -P 'BPM[^/]+' 
BPM_DEV_TIBBPMA_HOST_01 
0

您可以使用正则表达式:

\/opt\/tibco\/run\/([^\/]*)\/([^\/]*)\/([^\/]*)\/host\/logs 

对于/ opt/tibco/run/tibbpma/tibcohost/BPM_DEV_TIBBPMA_HOST_01/host/logs

$1 would return tibbpma 
$2 would return tibcohost 
$3 would return BPM_DEV_TIBBPMA_HOST_01 

然后,您可以让使用$ 1,$ 2和$ 3都

示例Perl代码给您正在寻找

my $str = "/opt/tibco/run/tibbpma/tibcohost/BPM_DEV_TIBBPMA_HOST_01/host/logs"; 
if ($str =~ /\/opt\/tibco\/run\/([^\/]*)\/([^\/]*)\/([^\/]*)\/host\/logs/) { 
     print $1 . "_" . $2 . "_". $3; 
} 

字符串给输出tibbpma_tibcohost_BPM_DEV_TIBBPMA_HOST_01 如果你想你所需的字符串省略,tibcohost部分..要么从上面的正则表达式中省略$ 2

使用RE /选择/ TIBCO /运行/([^ /] )/ [^ /] /([^ /] *)/主机/日志

my $str = "/opt/tibco/run/tibbpma/tibcohost/BPM_DEV_TIBBPMA_HOST_01/host/logs"; 
if ($str =~ /\/opt\/tibco\/run\/([^\/]*)\/[^\/]*\/([^\/]*)\/host\/logs/) { 
     print $1 . "_" . $2 ; 
} 

得到tibbpma_BPM_DEV_TIBBPMA_HOST_01