我在互联网上收到了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/'
有没有解决方案?
答案 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"