Sed 在两个字符串之间提取字符串

Sed 在两个字符串之间提取字符串,sed,Sed,我有一个文件,ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC 我想在两个字符串之间剪切文本:第一个TS和DOCC。我试过了 导致_BAR99.DAT–匹配文件名中的第二个TS 所需结果:.TS.D20161022.TS_BAR99.DAT 如何修改sed命令以获得所需的结果?regex是贪婪的。所以。*TS将尽可能多地匹配字符串,这意味着它将匹配字符串中的最后一个TS。谢谢Marc B,有没有办法实现所需的结果TS.*\.DOCC?这将迫使它在TS/DOC

我有一个文件,ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC

我想在两个字符串之间剪切文本:第一个TS和DOCC。我试过了

导致_BAR99.DAT–匹配文件名中的第二个TS

所需结果:.TS.D20161022.TS_BAR99.DAT


如何修改sed命令以获得所需的结果?

regex是贪婪的。所以。*TS将尽可能多地匹配字符串,这意味着它将匹配字符串中的最后一个TS。谢谢Marc B,有没有办法实现所需的结果TS.*\.DOCC?这将迫使它在TS/DOCC之间尽可能匹配,捕获第二个作为其中的一部分。Marc-我对这个sed非常陌生,你能帮我写完整的命令吗?太棒了,它很有效。。我将尝试通过变量调用它们。Stro-我尝试调用变量,但没有得到相同的结果。==>echo$v1 TS==>echo$v2 DOCC==>echo$filename ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC==>echo$filename | sed s/^.*.$v1\./.$v1./;s/\$v2>.TS.D20161022.TS_BAR99.DAT.DOCC所需结果:.D20161022.TS_BAR99.DAT/bin/bash v1=TS v2=DOCC filename=ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC echo$filename | sed s/^.*\$v1\./$v1./;s/\.$v2//谢谢。echo$filename | sed s/^.*.$v1\./.$v1./;s/\.$v2/.TS.D20161022.TS_-BAR99.DAT我也想删除第一个TS,并希望得到如下结果:.D20161022.TS_-BAR99.DAT当然,你能找到它吗?提示:看第一次替换
echo "ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC" | sed 's/^.*\.TS\./.TS./;s/\.DOCC/./'
echo "ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC" | sed 's/^.*\.TS\./.TS./;s/\.DOCC/./'