2016-04-09 11 views
1

Wie kann ich alles nach einem Leerzeichen löschen? Ich kann es tun, wenn ich den Doppelpunkt ':' anstelle von [[: space:]] spezifiziere.Mit sed entfernen Sie alles nach einem [[: space:]]

$ cat t.sh 
echo "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" | \ 
    sed -r -e 's#.*\(DW_Prod.*\)[[:space:]].*#\\1#' 

$ ./t.sh 
DW_Prod\Facets\UNRCH_MBRS: UNRCH_Members.sql 
+1

Randbemerkung : Du musst dem Zeilenumbruch nach einer Pipe nicht entkommen. –

+1

Die Sed-Flags und das Double-Escape im Hold-Muster löschen: 'echo" DW_Prod \\ Facets \\ UNRCH_MBRS: UNRCH_Members.sql "| sed 's #. * \ (DW_Prod. * \) [[: space:]]. * # \ 1 #' ' –

+0

Gute Antworten von allen. Ich habe die erste chronologisch als Antwort markiert. Danke vielmals. – lit

Antwort

0

entfernen alles nach dem Leerzeichen, das wäre:

echo "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" | sed -r 's/([[:space:]]+).*/\1/' 
2

Sie ermöglichen ERE metachars mit -r und dann Deaktivieren der ERE Einfanggruppen (...) durch die Trennzeichen zu entkommen \(...\) und Deaktivieren der Rückreferenzierung \1 durch den Backslash zu umgehen \\1. Versuchen Sie folgendes:

$ echo "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" | \ 
    sed -r -e 's#.*(DW_Prod.*)[[:space:]].*#\1#' 
DW_Prod\Facets\UNRCH_MBRS: 

Alles was Sie brauchen allerdings wirklich ist:

$ echo "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" | 
    sed 's#[[:space:]].*##' 
DW_Prod\Facets\UNRCH_MBRS: 
1

Sie grep -o verwenden können (genaue Übereinstimmung) und einen regulären Ausdruck von nicht einem Raum:
grep -o '^[^ ]*' <<< "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql"

Verwandte Themen