使用 sed 替换最后一次出现
Using sed to replace last occurrence
我在网上收到 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/'
有解决办法吗?
删除行尾锚点。
使用捕获组。
echo "SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20141209.lst" | sed 's/\(.*\)20141209/0150122/'
.*
默认是贪心的。它会尽可能匹配所有字符。这样它就可以捕获到最后一个数字 20141209
之前的所有字符。在基本sed中,捕获组写成\(..\)
,用来捕获字符
使用 /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"
我在网上收到 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/'
有解决办法吗?
删除行尾锚点。
使用捕获组。
echo "SF_db_gobfid01_20141209/SF_db_gobfid01_bat_20141209.lst" | sed 's/\(.*\)20141209/0150122/'
.*
默认是贪心的。它会尽可能匹配所有字符。这样它就可以捕获到最后一个数字20141209
之前的所有字符。在基本sed中,捕获组写成\(..\)
,用来捕获字符
使用 /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"