2017-03-06 2 views
0

Ich habe eine Textdatei mit folgendem Inhalt:Wie eine Zeichenfolge mit mehreren Zeichen zu analysieren, zu spalten on-Bash Scripting

Folder4/file2folder4.txt >> folder2/folder2_1/file1folder2.txt

ich habe ein Skript, das jeweils Linien analysiert als

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

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

als eine syntaktische Analyse folgt folgt:

QUELL = "Folder4/file2folder4.txt"

DESTINATION = "> folder2/folder2_1/file1folder2.txt"

Aber was ich

wollen

QUELL = "Folder4/file2folder4.txt“

DESTINATION = "folder2/folder2_1/file1folder2.txt"

Irgendwelche Hilfe. Danke

Antwort

1

IFS ist kein einzelner, multicharter Begrenzer; Stattdessen ist es eine Sammlung von Ein-Zeichen-Trennzeichen. Sie können einen regulären Ausdruck verwenden, um zwei durch ein beliebiges Trennzeichen getrennte Felder zu trennen.

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

Sie können keine Mehrfachzeichenfolge in IFS. Es unterstützt nur einzelne Zeichen, die als Eingabefeldtrennzeichen verwendet werden.

Sie können wie diese Verwendung von BASH reguläre Ausdrücke hier machen:

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

unsere Variable Check:

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