Regex 正则表达式:不匹配组而不是单个字符

Regex 正则表达式:不匹配组而不是单个字符,regex,sed,Regex,Sed,我想要的是删除每个字符,直到它到达整个组.wav(也就是说,我希望结果是.wav),但是sed似乎会删除每个字符,直到它到达四个字符中的任何一个。如何做到这一点?小组在[]内不起作用,因此点和家长一样是班级的一部分 那么: echo test.a.wav|sed 's/[^(.wav)]*//g' .a.wav 请注意,可能还有其他有效的解决方案,但您没有提供您试图做什么来确定什么可能是最佳解决方案的上下文。组在[]内不起作用,因此点和参数一样是类的一部分 那么: echo test.a.wa

我想要的是删除每个字符,直到它到达整个组
.wav
(也就是说,我希望结果是
.wav
),但是sed似乎会删除每个字符,直到它到达四个字符中的任何一个。如何做到这一点?

小组在[]内不起作用,因此点和家长一样是班级的一部分

那么:

echo test.a.wav|sed 's/[^(.wav)]*//g'
.a.wav
请注意,可能还有其他有效的解决方案,但您没有提供您试图做什么来确定什么可能是最佳解决方案的上下文。

组在[]内不起作用,因此点和参数一样是类的一部分

那么:

echo test.a.wav|sed 's/[^(.wav)]*//g'
.a.wav

请注意,可能还有其他有效的解决方案,但您没有提供您试图做什么来确定什么可能是最佳解决方案的上下文。

您请求的功能不受
sed
(负前瞻)的支持,但Perl做到了这一点

echo test.a.wav|sed 's/.*\(\.wav\)/\1/g'

sed
(负向前看)不支持您请求的功能,但Perl会做到这一点

echo test.a.wav|sed 's/.*\(\.wav\)/\1/g'

您可以像这样使用
awk
而不是regex:

$ echo 'test.a.wav' | perl -pe 's/^(?:(?!\.wav).)*//g'
.wav

它将数据与您的图案分割,然后打印图案和其余数据。

您可以像这样使用
awk
而不是regex:

$ echo 'test.a.wav' | perl -pe 's/^(?:(?!\.wav).)*//g'
.wav
它将数据与您的图案分割,然后打印图案和其他数据。

这可能适合您(GNU-sed):

或:

注意:如果该行为空,则删除该行。如果不需要,只需删除
/。/!d
来自上述命令。

这可能适用于您(GNU-sed):

或:

注意:如果该行为空,则删除该行。如果不需要,只需删除
/。/!d
来自上述命令