2014-12-07 28 views
6

mein Problem von heute ist in einer Zeichenfolge wie folgt zu ersetzen ->6427//6422 6429//6423 6428//6421Substring Substitution in bash

jeder // mit einem ,. Ich habe versucht, mit verschiedenen Befehlen:

  • finalString=${startingString//[//]/,} nicht so
  • fileTemp=$(echo -e "$line\n" | tr "//" "," hat eine doppelte Substitution funktioniert:

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

Jemand hat eine Idee einer Möglichkeit, es zu tun?

Antwort

3

Sie können BASH Stringmanipulationen verwenden (müssen / mit \/ zu entkommen):

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

Ähnlich awk mit:

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

PS:tr kann hier nicht, da trübersetzt werden jedes Zeichen in Eingabe zu einem anderen Zeichen in der Ausgabe und hier hast du mit 2 ch Zeichen //.

+1

Großartig! Es klappt! –

+0

Gern geschehen, froh, dass es geklappt hat. – anubhava

1

können Sie mit sed als

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

Sie können auch den sed Befehl versuchen, wie diese

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

findet doppelte "/" und ersetzen mit ""

Beispiel

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

Re Ergebnisse

6427,6422 6429,6423 6428,6421