Je suis nouveau dans le script Shell. Je recherche un fichier créé dans Windows et contenant des retours à la ligne, à l'aide de la commande source
. Une fois la source ajoutée, lorsque j'y ajoute des caractères, elle commence toujours au début de la ligne.
test.dat
(qui a un retour chariot à la fin):
testVar=value123
testScript.sh
(sources ci-dessus fichier):
source test.dat
echo $testVar got it
La sortie que je reçois est
got it23
Comment puis-je supprimer le '\r'
de la variable?
encore une autre solution utilise tr
:
echo $testVar | tr -d '\r'
cat myscript | tr -d '\r'
l'option -d
correspond à delete
.
Vous pouvez utiliser sed comme suit:
MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it
En passant, essayez de faire un dos2unix
sur votre fichier de données.
utilisez cette commande sur votre fichier de script après l'avoir copié sous Linux/Unix
Perl -pi -e 's/\r//' scriptfilename
Pipe à sed -e 's/[\r\n]//g'
pour supprimer les retours chariot (\r
) et les sauts de ligne (\n
) de chaque ligne de texte.
pour une solution pure Shell sans appel de programme externe:
NL=$'\n' # define a variable to reference 'newline'
testVar=${testVar%$NL} # removes trailing 'NL' from string
Étant donné que le fichier que vous créez se termine par des retours à la ligne, le contenu de $testVar
devrait ressembler à ceci:
$ printf '%q\n' "$testVar"
$'value123\r'
(La $
de la première ligne est l'invite du shell; la $
de la deuxième ligne est tirée de la chaîne de formatage %q
et indique $''
en citant .)
Pour supprimer le retour à la ligne, vous pouvez utiliser Développement des paramètres du shell et Citation ANSI-C (nécessite Bash):
testVar=${testVar//$'\r'}
Ce qui devrait aboutir à
$ printf '%q\n' "$testVar"
value123