2013-03-20 21 views
15

Sono nuovo allo script di shell. Sto procurando un file usando il comando source che è stato creato in windows e ha un ritorno a capo. Dopo averlo appreso quando aggiungo alcuni caratteri, si arriva sempre all'inizio della riga.Come rimuovere il ritorno a capo e il ritorno a capo da una variabile nello script di shell

test.dat (which has carriage return at end) 
testVar=value123 

testScript.sh (sorces above file) 
source test.dat 
echo $testVar got it 

L'output che ottengo è

got it23 

Come posso rimuovere la '\ r' dalla variabile. Qualsiasi aiuto sarà davvero apprezzabile.

risposta

4

uso questo comando sul vostro file di script dopo averlo copiato per Linux/Unix

perl -pi -e 's/\r//' scriptfilename 
+0

Grazie una tonnellata per ' perl'. Non potevo scaricare 'dos2unix',' tr' non funzionava e cosa no! Molte grazie! –

10

È possibile utilizzare sed come segue:

MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g') 
    echo ${MY_NEW_VAR} got it 

EDIT

Tra l'altro provare fare un "dos2unix" sul tuo file di dati.

32

un'altra soluzione utilizza tr:

echo $testVar | tr -d '\r' 
cat myscript | tr -d '\r' 

l'opzione -d sta per delete.

2

tubo per sed -e 's/[\r\n]//g' per rimuovere entrambi i ritorni a capo (\r) e avanzamenti di riga (\n) da ogni riga di testo

+2

Non puoi rimuovere '\ n' usando sed come quello. Vedi http://sed.sourceforge.net/sedfaq5.html#s5.10 – Bryan

0

per una soluzione di shell pura senza chiamare programma esterno:

NL=$'\n' # define a variable to reference 'newline' 

testVar=${testVar%$NL} # removes trailing 'NL' from string 
Problemi correlati