2016-04-10 7 views
-1

これはUsing sed to remove everything after a [[:space:]]の追加部分です。私はStackOverflowが既存の質問にアドオンではなく新しい質問を望んでいることを知っています。sed正規表現に代理グループを指定する方法

DW_Prodが含まれている文字列から、パス以外の文字の後のすべてを削除します。今のところ、コロンとスペースは文字列の終わりです。はい、パスにスペースが含まれている可能性があります。これらは想定されていません。それが欠落している場合は、このドキュメント作業で問題ありません。

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

どのように正規表現は()(a|b|c)で指定された交代群で指定された結果のグループ間の違いを知っていますか?

+2

グループは左から右に番号が付けられています。 '(a | b | c)'は "交互のグループ"ではなく、交替を含むグループです。それだけです。さて、すべてのsed実装がBREの代替をサポートするわけではありません。 –

+0

問題の入力に対して期待される出力はどれくらいですか? – anubhava

+0

正規表現の概念と構文の基本的な誤解があります。あなたが今質問している質問は無意味です(キャプチャグループは正規表現が何であってもキャプチャグループです)。あなたはあなたが望むことを実行するために '\(:\ | [[:space:]] \)キャプチャグループを持たず、 '|'も使わない '[:[:space:]]'だけで、文字と文字クラスを含むブラケット式です。 regexpチュートリアルを読んで基礎を学び、その後質問に戻ってください。 –

答えて

1

DW_Prodの後にすべてを削除したい...コロンとスペースが文字列の最後であると言います。

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

それとも

$ 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

これを答えとしてマークします。結局のところ、この状況の答えは 'sed -r -e 's ^^ *(DW_Prod [^:[:space:]] *)。*#\ 1#I'' – lit