[英]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.