使用sed替换最后一次出现

时间:2015-01-22 12:54:10

标签: linux string unix sed

我在互联网上收到了this个问题和其他问题,但无法解决以下问题:

输入字符串为: SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20141209.lst

输出结果为: SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20150122.lst

但以下不起作用:

echo "SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20141209.lst" | sed 's/20141209$/20150122/'

有没有解决方案?

2 个答案:

答案 0 :(得分:2)

  • 删除线锚的末尾。

  • 使用捕获组。

    echo "SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20141209.lst" | sed 's/\(.*\)20141209/\120150122/'
    
    默认情况下,

    .*贪婪。它将尽可能匹配所有角色。这样它就可以捕获到最后一个数字20141209的所有字符。在基本sed中,捕获组写为\(..\),用于捕获字符。

答案 1 :(得分:0)

使用/2作为s命令的参数(有关详细信息,请参阅this reference):

echo "SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20141209.lst" | sed -r 's/20141209/20150122/2'
# prints "SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20150122.lst"