通过 ID 在文本中查找单词并替换同一行中的其他单词

Find word in text by ID and replace other word in the same line

我有带有一些规则的 crontab。我需要找到带有服务器 ID 的一行,然后替换该行末尾的天数。

$ crontab -l
00 6 * * * /home/scripts/User/19122391_User_Server_Notification_shutdown_delete.sh 64
00 16 * * * /home/scripts/User/20045967_User_Server_Notification_shutdown_delete.sh 15

服务器ID:19122391 天数:64

因此,我需要将数字 64 更改为另一个,例如 crontab 中的 100。要找到一行,我使用此命令 awk '/19122391/{print}' crontab.bak,但是如何替换行中的最后一个数字,我找不到解决方案。

我可以使用 bash 脚本来执行此操作吗?

使用awk

$ awk -i inplace '/19122391/{$NF=100}1' crontab.bak
00 6 * * * /home/scripts/User/19122391_User_Server_Notification_shutdown_delete.sh 100
00 16 * * * /home/scripts/User/20045967_User_Server_Notification_shutdown_delete.sh 15

使用sed

$ sed -i '/19122391/s/[0-9]*$/100/' crontab.bak
00 6 * * * /home/scripts/User/19122391_User_Server_Notification_shutdown_delete.sh 100
00 16 * * * /home/scripts/User/20045967_User_Server_Notification_shutdown_delete.sh 15