2014-02-27 127 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