正则表达式匹配连字符之前的所有内容 - 多重匹配
Regex to match everything before hypen - multiple match
我得到这个字符串:
scQA00-psql11 scQA00-psql21 scQA01-psql2 scQA00-psql21
scqa00-psql01 scqa00-psql11 scqa00-psql21
我只想匹配:
scQA00 scQA00 scQA01 scQA00
scqa00 scqa00 scqa00
我试过:[^-]+
但不能再进一步了:(
我也试过了(.*?)(?=-)+
但它只匹配第一次出现。
我怎样才能匹配连字符之前的所有内容但忽略空格?
如果要提取-
之前所有由non-whitespace个字符组成的子串,可以使用
grep -Po '[^\s-]+(?=-)' file
见regex demo。 [^\s-]+(?=-)
模式匹配除空格和 -
之外的任何一个或多个字符,后跟 -
.
如果您只需要删除以 -
开头的字符串部分,直到下一个空格或字符串结尾,您可以使用 sed
:
sed -E 's/-[^[:space:]]+//g' file
这里,-[^[:space:]]+
匹配一个 -
然后一个或多个除空格以外的字符。
text='scQA00-psql11 scQA00-psql21 scQA01-psql2 scQA00-psql21
scqa00-psql01 scqa00-psql11 scqa00-psql21'
grep -Po '[^\s-]+(?=-)' <<< "$text"
# scQA00
# scQA00
# scQA01
# scQA00
# scqa00
# scqa00
# scqa00
sed -E 's/-[^[:space:]]+//g' <<< "$text"
# scQA00 scQA00 scQA01 scQA00
# scqa00 scqa00 scqa00
我得到这个字符串:
scQA00-psql11 scQA00-psql21 scQA01-psql2 scQA00-psql21
scqa00-psql01 scqa00-psql11 scqa00-psql21
我只想匹配:
scQA00 scQA00 scQA01 scQA00
scqa00 scqa00 scqa00
我试过:[^-]+
但不能再进一步了:(
我也试过了(.*?)(?=-)+
但它只匹配第一次出现。
我怎样才能匹配连字符之前的所有内容但忽略空格?
如果要提取-
之前所有由non-whitespace个字符组成的子串,可以使用
grep -Po '[^\s-]+(?=-)' file
见regex demo。 [^\s-]+(?=-)
模式匹配除空格和 -
之外的任何一个或多个字符,后跟 -
.
如果您只需要删除以 -
开头的字符串部分,直到下一个空格或字符串结尾,您可以使用 sed
:
sed -E 's/-[^[:space:]]+//g' file
这里,-[^[:space:]]+
匹配一个 -
然后一个或多个除空格以外的字符。
text='scQA00-psql11 scQA00-psql21 scQA01-psql2 scQA00-psql21
scqa00-psql01 scqa00-psql11 scqa00-psql21'
grep -Po '[^\s-]+(?=-)' <<< "$text"
# scQA00
# scQA00
# scQA01
# scQA00
# scqa00
# scqa00
# scqa00
sed -E 's/-[^[:space:]]+//g' <<< "$text"
# scQA00 scQA00 scQA01 scQA00
# scqa00 scqa00 scqa00