2014-12-07 14 views
6

il mio problema di oggi è quello di sostituire in una stringa come questo ->6427//6422 6429//6423 6428//6421Substring sostituzione in bash

ogni // con un ,. Ho provato con diversi comandi:

  • finalString=${startingString//[//]/,} non funziona
  • fileTemp=$(echo -e "$line\n" | tr "//" "," fa una doppia sostituzione come questo:

    hello//world --->hello,,world

qualcuno ha un'idea di un modo per farlo?

risposta

3

È possibile utilizzare manipolazioni di stringhe BASH (necessità di fuggire / con \/):

s='6427//6422 6429//6423 6428//6421' 
echo "${s//\/\//,}" 
6427,6422 6429,6423 6428,6421 

Allo stesso modo utilizzando awk:

awk -F '//' -v OFS=, '{$1=$1}1' <<< "$s" 
6427,6422 6429,6423 6428,6421 

PS:tr non può essere usato qui dal tr traduce ogni carattere in input per un altro carattere nell'output e qui hai a che fare con 2 ch aracters //.

+1

Ottimo! Funziona! –

+0

Prego, felice che abbia funzionato. – anubhava

1

È possibile utilizzare sed come

$ echo "6427//6422 6429//6423 6428//6421" | sed 's#//#,#g' 
6427,6422 6429,6423 6428,6421 
1

Potete anche provare il comando sed come questo

sed 's#/\{2,2\}#,#g' 

trova doppia "/" e sostituirlo con ""

Esempio

echo "6427//6422 6429//6423 6428//6421"| sed 's#/\{2,2\}#,#g' 

Re sults

6427,6422 6429,6423 6428,6421 
Problemi correlati