2016-04-10 17 views
-1

Bu, Using sed to remove everything after a [[:space:]]'un ek bir parçasıdır. StackOverflow'un mevcut sorulara eklentiler yerine yeni sorular sorduğunu biliyorum.Sed regex'e alternatif bir grup nasıl belirlenir

Yol olmayan bir karakterden sonra her şeyi DW_Prod içeren dizeden kaldırmak istiyorum. Şimdilik, bir kolonun ve boşluğun dizenin sonu olduğunu söylüyorum. Evet, yolların boşluk içerebileceğini biliyorum. Bunların yapılmaması gerekiyor. Eğer kaçırılırsa, bu doküman çalışması için sorun değil.

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

nasıl regex () tarafından belirtilmiş bir sonuç grubu ve (a|b|c) tarafından belirlenen bir alternatif grubu arasındaki farkı biliyor?

+2

Gruplar sayılı. '(a | b | c)' bir "alternatif grup" değil, bir dönüşüm içeren bir gruptur, hepsi bu. Bir kenara göre, tüm sed uygulamaları BRE'deki değişimi desteklemez. –

+0

Söz konusu girdiler için beklenen çıktınız nedir? – anubhava

+0

Regexp kavramları ve sözdizimi ile ilgili temel yanlış anlamalar yaşıyorsunuz. Şimdi sorduğunuz soru anlamsızdır (bir yakalama grubu hangi regexp içeriyor olursa olsun bir yakalama grubudur) ve istediğiniz şeyi yapmak için '\ (: \ | [[: space:]] \)' yazmazsınız ama bunun yerine sadece [[[[space:]] '' yakalama grubu ve '' 'yok, sadece bir karakter ve bir karakter sınıfı içeren bir braket ifadesi. Temelleri öğrenmek için bir regexp öğreticisini okuyun ve ardından sorularınızla tekrar gelin. –

cevap

1

Herşeyi sonra kaldırmak istiyorum ... DW_Prod ... Dize sonu ve dize sonu olduğunu söylüyorum. soldan sağa

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

Ya

$ echo "blah DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" | \ 
    sed -n -e 's#^.*\(DW_Prod[^:[:space:]]*[:[:space:]]\).*$#\1#p' 
DW_Prod\Facets\UNRCH_MBRS: 
+0

Ben bunu cevap olarak işaretleyeceğim. Nihayetinde, bu durumun cevabı "sed -r-e 'dir. # ^. * (DW_Prod [^: [: space:]] *). * # \ 1 # – lit