如何根据Unix文件中的分隔符替换模式匹配行的最后一个单词?

时间:2018-03-10 06:43:48

标签: unix

我有一个文件Backup_status.txt,如下所示。

x01stestdb1a-10.92.201.111-SUCCESS
x01stestdb2a-10.92.201.112-SUCCESS
x01stestdb3a-10.92.201.113-SUCCESS

在所有服务器上运行的备份。

例如,如果在x01stestdb2a中提交备份,我们需要在此文件中使用主机名x01stestdb2a进行搜索,并将状态更改为FAIL。 这里我使用连字符( - )作为分隔符。

帮助我如何在文件中搜索该服务器名称,并使用分隔符替换最后一个块 - 。

注意:我想更改文件中的内容。

1 个答案:

答案 0 :(得分:0)

试试这个:

sed -i '/SERVER1/ s/-[^-]*$/-FAIL/' Backup_status.txt 

/SERVER1/让sed在匹配SERVER1的行上替换。

sed解决方案假设SUCCESS / FAIL始终位于最后一个字段中,这可能不是真的。更通用的解决方案是使用awk:

awk -i inplace -F'-'  '/SERVER1/ {sub($3, "FAIL")}; {print}' Backup_status.txt 
  • -i inplacesed -i
  • 相同
  • -F'-'将分隔符设置为'-'
  • /SERVER1/ {sub($3, "FAIL")};将包含SERVER1的第三个字段替换为" FAIL"。
  • {print}打印每一行。对于包含SERVER1的行,它会打印更改后的版本,否则会按原样打印该行。