簡體   English   中英

bash grep regex從字符串的開頭到變量

[英]bash grep regex from start of the string to variable

我有一個包含以下字符串的文件,並且需要使用數字將文件夾的路徑分配給變量:

/tmp/gfh/000000004802803/blablabla/EngID_Consolidation.zip
/tmp/vcbn/000000005395825/blablabla/172_6578-DUMP_NOMServer.zip
/tmp/one3/435876dfhg/000000004017051/5.zip
/tmp/one3/dsfkgjh/dsjfhgfd/000000004617319/Sybase.zip

例如,我需要分配變量:/ tmp / gfh / 000000004802803 /

數字和路徑總是不同的。 首先,我使用正則表達式將數字分配到變量文件夾中:

zip_folder_name0=$(grep -E -o "/([0]{5}[0-9]{10})/" <<< $zip_path)
zip_folder_name=${zip_folder_name0#"/"}
zip_folder_name=${zip_folder_name%"/"}
echo $zip_folder_name

哪一個返回000000004802803如何將從根目錄到文件夾的所有路徑分配給另一個變量? 我認為可以通過正則表達式來完成,從字符串的開頭到變量$ zip_folder_name。 這是可能的嗎? 也許還有另一種方法?

UPD1只是忘了提一下,帶數字的文件夾之后可以是另一個文件夾,例如/tmp/gfh/000000004802803/blablabla/EngID_Consolidation.zip而且我需要/ tmp / gfh / 000000004802803 /准確地放入變量。

while read line; do        
   dir=$(grep -oE .*/[0-9]+/ <<< $line|tr -d / )
   echo dir=$dir num=$num 
done < zips.txt 

> dir=/tmp/gfh/000000004802803/
> dir=/tmp/vcbn/000000005395825/
> dir=/tmp/one3/435876dfhg/000000004017051/
> dir=/tmp/one3/dsfkgjh/dsjfhgfd/000000004617319/

以下是一個腳本,它將輸入參數輸入$IN_STR並吐出您需要的字符串**

#!/bin/bash

BASE_REGEX="[0-9]{15}"
IN_STR=$1

FIFTEEN_DIGIT_DIR_NAME=`echo $IN_STR | grep -E -o "$BASE_REGEX"`
FIFTEEN_DIGIT_DIR_CONTAINER=`echo $IN_STR | grep -Po ".*(?=$BASE_REGEX)"`

echo $FIFTEEN_DIGIT_DIR_CONTAINER$FIFTEEN_DIGIT_DIR_NAME

輸出:

/tmp/gfh/00000000480280

說明:
grep -P :Perl表達式
-o :僅匹配
.* :重復一切
(?=) :查詢字符串
[0-9] :任意數字
{15} :15個字符

**從注釋開始,要求是這樣的:直到文件夾名稱正好包含15個數字的路徑,包括該文件夾本身的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM