2016-04-13 12 views
0

versucht, die sapces und unterstreicht in this is just a (test)Ersetzen von Leerzeichen und Klammern in einer Zeichenfolge + sed + gibt es einen besseren Weg als dies?

ich folgendes zu ersetzen:

echo "this is just a (test)" | sed -e 's/ /_/g' | sed -e 's/(//g' | sed -e 's/)//g' 

und das gibt mir:

this_is_just_a_test 

Gibt es einen besseren Weg? kürzere Art, es in sed zu schreiben?

echo "this is just a (test)" | tr \ _ | tr -d \(\) 

Die erste tr ersetzt Leerzeichen mit Unterstrichen und die zweite löscht alle Klammern:

+2

Sie können die '-e'-Anweisungen zumindest in einem einzelnen' sed'-Aufruf kombinieren: 'sed -e 's// _/g' -e 's/(// g' -e 's /) // g'' oder kürzer: 'sed -e 's// _/g' -e 's/[()] // g''. Sie können stattdessen Zeichen durch "tr" ersetzen. 'tr' kann auch (in einem zweiten Aufruf) verwendet werden, um bestimmte Zeichen zu entfernen. Aber alles in allem hilft das nicht sehr, also bleibe ich beim (single) 'sed' Call. – Alfe

+1

Sie können mehrere 'sed'-Befehle mit einem ';' zusammen ketten. Also vielleicht 'sed' s// _/g; s/[()] // g'' ist mehr auf den Punkt. – jeberle

Antwort

1

Sie können die gleiche Sache tr mit erreichen.

Verwandte Themen