echo test.a.wav|sed 's/[^(.wav)]*//g'
.a.wav
我想要的是删除每个字符,直到它到达整个组.wav
(也就是说,我希望结果为.wav
),但似乎sed将删除每个字符,直到它到达四个字符中的任何一个。如何做到这一点?
答案 0 :(得分:1)
组在 [] 中不起作用,因此点是该类的一部分,就像parens一样。
怎么样:
echo test.a.wav|sed 's/.*\(\.wav\)/\1/g'
请注意,可能还有其他有效的解决方案,但您没有提供有关您尝试执行的操作的上下文,以确定最佳解决方案。
答案 1 :(得分:1)
sed
(否定前瞻)不支持您要求的功能,但Perl可以解决此问题。
$ echo 'test.a.wav' | perl -pe 's/^(?:(?!\.wav).)*//g'
.wav
答案 2 :(得分:1)
您可以使用awk
代替正则表达式:
echo test.a.wav.more | awk -F".wav" '{print FS$2}'
.wav.more
它将数据与您的模式分开,然后打印模式和其余数据。
答案 3 :(得分:1)
这可能适合你(GNU sed):
sed ':a;/^\.wav/!s/.//;ta;/./!d' file
或:
sed 's/\.wav/\n&/;s/^[^\n]*\n//;/./!d' file
N.B。如果该行为空,则删除该行。如果不需要,只需从上述命令中删除/./!d
。