2016-04-09 18 views
1

空白の後にすべてを削除するにはどうしたらいいですか? [[:space:]]ではなくコロン ':'を指定するとできます。sedを使って[[: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

サイドノートを:パイプの後に改行をエスケープする必要はありません。 –

+1

保留パターンでsedフラグと二重エスケープを取り除きます: 'echo" DW_Prod \\ Facets \\ UNRCH_MBRS:UNRCH_Members.sql "| sedの#。* \(DW_Prod。* \)[[:space:]]。*#\ 1# '' –

+0

すべてからの偉大な答え。私は答えとして最初に時系列的にマークしました。どうもありがとう。 – lit

答えて

0

空白の後、すべてを削除し、それは次のようになります。

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

あなたは-rとEREのmetacharsを有効にして、区切り文字をエスケープ\(...\)とによって後方参照\1を無効にすることによって、EREのキャプチャグループ(...)を無効にしますバックスラッシュをエスケープする\\1。これを試してみてください:

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

あなたが本当にかかわらず、必要なのは、次のとおりです。

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

あなたはgrepのの-o(正確に一致)とない空間の正規表現を使用することができます
grep -o '^[^ ]*' <<< "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql"

関連する問題