2017-03-06 51 views
0

我有以下內容的文本文件:如何分析與多個字符的字符串上猛砸拆分腳本

folder4/file2folder4.txt >>文件夾2/folder2_1/file1folder2.txt

我有解析每個線如下

while IFS=" >> " read -r src dest 
do 

    if [ "$src" != "" ]; then 
     SOURCEFILES+=("$src") 
    fi 
    if [ "$dest" != "" ]; then 
     DESTINATIONFILES+=("$dest") 
    fi 
done < $TransferDescriptor 

它解析如下腳本:

的SourceFile = 「folder4/file2folder4.txt」

DESTINATION = 「>文件夾2/folder2_1/file1folder2.txt」

但我想要的東西

的SourceFile =「folder4/file2folder4.txt」

DESTINATION = 「文件夾2/folder2_1/file1folder2.txt」

任何幫助。謝謝

回答

1

IFS是不是一個單一的multicharcter分隔符;相反,它是一個單字符分隔符的集合。您可以使用正則表達式分隔由任意分隔符分隔的兩個字段。

regex='(.*) >> (.*)' 
while IFS= read -r line dest 
do 
    [[ $line =~ $regex ]] || continue 
    src=${BASH_REMATCH[1]} 
    dest=${BASH_REMATCH[2]} 

    if [[ -n $src ]]; then 
     SOURCEFILES+=("$src") 
    fi 
    if [[ -n $dest ]]; then 
     DESTINATIONFILES+=("$dest") 
    fi 
done < "$TransferDescriptor" 
1

IFS中不能有多個字符串。它只支持單字符作爲輸入字段分隔符。

您可以使用BASH正則表達式的位置是這樣的:

while IFS= read -r line; do 
    if [[ $line =~ $re ]] ; then 
     srcfile="${BASH_REMATCH[1]}" 
     dest="${BASH_REMATCH[2]}" 
    fi 
done < file 

檢查我們的變量:

declare -p srcfile dest 
declare -- srcfile="folder4/file2folder4.txt" 
declare -- dest="folder2/folder2_1/file1folder2.txt"