Der einfachste Weg, Leerzeichen durch (Unterstriche) _ in bash [geschlossen] zu ersetzen


90

Vor kurzem musste ich ein kleines Skript schreiben, das VMs in XenServer analysiert. Da die Namen der VMs in Windows XP oder Windows Server 2008 hauptsächlich Leerzeichen enthalten, musste ich diese Leerzeichen kürzen und durch Unterstriche _ ersetzen. Ich habe eine einfache Lösung gefunden, um dies mit sed zu tun. Dies ist ein großartiges Werkzeug, wenn es um die Manipulation von Saiten geht.

echo "This is just a test" | sed -e 's/ /_/g'

kehrt zurück

This_is_just_a_test

8
und die frage ist?
RageZ

2
Hallo Latz, Stackoverflow ist eine Seite mit Fragen und Antworten. Sie stellen Fragen und andere beantworten sie oder Sie können Fragen von anderen beantworten. Wenn Sie Ihr Wissen teilen möchten, können Sie eine Frage stellen und diese dann selbst beantworten (nachdem Sie einige Zeit gelassen haben, damit auch andere antworten können).
Mouviciel

2
oups dachte, ich würde dieses Wissen auf diese Weise hinzufügen, damit es hier gespeichert wird. Wie auch immer, ich werde es tun, wie du es beim nächsten Mal gesagt hast, indem du meine eigene Frage beantwortest :)
flazzarini

Antworten:


173

Sie können dies nur mit der Shell tun, ohne trodersed

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test

5
Oder konvertieren Sie alle Nicht-ASCII-Wortzeichen in Unterstriche : ${str//[^a-zA-Z0-9]/_}; Wenn Sie sich nicht an eine reine POSIX-Shell halten, können Sie die verfügbaren Funktionen nutzen.
Waffen

Es kann auch Interpunktionen geben, die legitim sind. wir wissen nie.
Ghostdog74

Danke für diese Lösung genau das, wonach ich gesucht habe. Vielen Dank
Flazzarini

17

Dies ist eine Grenzprogrammierung, aber prüfen Sie die Verwendung von tr :

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

Sollte es tun. Der erste Aufruf drückt die Leerzeichen zusammen, der zweite wird durch einen Unterstrich ersetzt. Sie müssen wahrscheinlich TABs und andere Leerzeichen hinzufügen. Dies gilt nur für Leerzeichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.