Domanda

Ho un file generato dalle finestre che devo incollare in uno script sotto linux. Il mio script funziona bene, tranne per il fatto che alla fine di ogni riga ho ottenuto un ^ M char.

Come faccio a rimuovere con bash?

Al momento il mio script è:

#/bin/bash
IFS=$'\n'
for CUSTOMER in `cat exp.csv`
do
    echo $CUSTOMER
done
È stato utile?

Soluzione

dos2unix su exp.csv prima di ulteriori trasformazioni.

Altri suggerimenti

^ M dovrebbe essere finestre capo \ r, quindi è sufficiente rimuovere tutti \ r È possibile ottenere questo utilizzando lo strumento TR, che è possibile chiamare dal proprio script bash, questo è alle voci di Wikipedia (non ho verificarlo):

tr -d '\r' < inputfile > outputfile

Quindi, da bash dovrebbe essere qualcosa del tipo

VAR=`echo -n $CUSTOMER | tr -d '\r'`

Lo faccio molto con tr. Il carattere CR è 013 in ottale:

tr -d '\013' < $FILE

Quindi nel tuo ciclo, che sarebbe solo

for CUSTOMER in `tr -d '\013' < exp.csv`

comando dos2unix ont lui file

ci sono diversi modi per rimuovere cattivo char M dal file

  1. Comando uso dos2unix file_name
  2. file aperto in editor vi, andare a modalità di comando e tipo :%s/ctrl+v ctrl+m//g questo rimuoverà tutti i cattivi caratteri da si file. ora utilizzare :wq per salvare ed uscire
  3. sed -e "s/^M//" filename(exist file name) > newfilename(new name)

    sed -e "s / ^ M //" nome del file (nome del file esiste)> newfilename (nuovo nome)

NOTA: per trovare cattive caratteri sul colpo server UNIX sotto comando per tutti i file java

find . -name "*.java*"  -type f | xargs grep -l ^M *

Allo stesso modo è possibile utilizzare "*.*" invece di "*.java" per tutti i tipi di file

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top