使用sed删除[[:space:]]之后的所有内容

时间:2016-04-09 18:14:19

标签: sed grep

如何删除空格后的所有内容?如果我指定冒号,我可以这样做:'而不是[[: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

3 个答案:

答案 0 :(得分:2)

您正在使用-r启用ERE metachars,然后通过转义分隔符(...)并通过转义反斜杠{{禁用反向引用\(...\)来禁用ERE捕获组\1 1}}。试试这个:

\\1

你真正需要的只是:

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

答案 1 :(得分:1)

你可以使用grep -o(完全匹配)和不是空格的正则表达式:
grep -o '^[^ ]*' <<< "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql"

答案 2 :(得分:0)

删除空格后的所有内容,即:

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