如何在空格后面删除所有内容?如果我指定冒号“:”而不是[[: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
您正在使用-r
启用ERE元字符,然后通过转义定界符\(...\)
来禁用ERE捕获组(...)
,并通过转义反斜杠\\1
来禁用反向引用\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:
grep -o '^[^ ]*' <<< "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql"
删除空格后面的所有内容,即:
echo "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" | sed -r 's/([[:space:]]+).*/\1/'
echo "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" | sed 's#.*\(DW_Prod.*\)[[:space:]].*#\1#'
- user4401178