带环的猫不能读长行

时间:2018-06-11 12:45:43

标签: bash shell

我的脚本有问题。我试着用cat读取一个xml文件并用循环读取每一行。例如:

cat file.xml | while read line; do echo $line done

但是在我的xml文件中,我有很长的行没有反斜杠,似乎cat file.xml没有在文件中占用大行。但是,当我在没有'而读取行'的情况下cat file.xml时,它可以正常工作。

猫是否受到线长的限制?或者我只是做了一个糟糕的操纵?我该怎么做才能得到这些线?

谢谢,再见。

这是我的脚本不起作用(法语):

#!/bin/bash

## SCRIPT PERMETTANT DE POUVOIR PRENDRE UNE SOURCE DE TXT POSSEDANT DU TEXTE À CHAQUE LIGNE ET LES PLACER, GRACE À UN MOT CLEF, DANS DES FICHIERS SPECIFIES VIA LE CHEMIN D'ACCESS D'UN FOLDER INDIQUÉ PAR L'UTILISATEUR.

## EXEMPLE ##
## L'utilisateur prend un dossier "X" ou sont contenus des XML. Il a placé dans tous ces XML un mot clé "motclefnumero1". Grace à ce script, il pourra changer ce mot clé par les lignes d'un fichier texte.



#### DEMANDE UTILISATEUR ####
echo 'Quel est le fichier source TXT (Possedant ce que vous voulez mettre)'
read textSource

echo 'Quel est le folder où les fichiers que vous souhaitez traiter sont placés?'
read folderSource

echo 'Indiquer le mot clé souhaité (Exemple : motclef1)'
read motClef


# cat file | cut -c1-80

# TABLEAU CONTENANT LES LIGNES DE NOTRE SOURCE TXT
myArray=()
while IFS= read -r line; do
  myArray+=("$line")
done < "$textSource"

i=0

## PROCESS
ls -1 "$folderSource" | while read file; do
    cat "$folderSource/$file" | while read texte; do
        # Dans le cas où le dossier folderSource n'existe pas
        if [ ! -d "$folderSource/resultat" ]; then
            mkdir "$folderSource/resultat"
        fi

        ## Effectuer la transputation du texte demandé dans notre texte de remplacement
        echo ${texte//$motClef/${myArray[$i]}} >> "$folderSource/resultat/$file"

        echo "Line $i : $texte"

        ## CONSOLE LOG
        echo ${myArray[$i]} $folderSource/$file
        echo $i
    done

    ## Increment i var
    i=$((i+1))
done

决议: 您好,我已经解决了我的问题。而不是使用这个:

cat "$folderSource/$file" | while read texte; do

只需使用IFS读取每一行,就可以了:

while IFS='' read -r texte || [[ -n "$texte" ]]; do
done < "$folderSource/$file"

0 个答案:

没有答案