仅在找到匹配字符串时替换行的最后一个单词

时间:2018-02-22 12:10:56

标签: unix sed

我想在找到匹配的字符串时替换该行的最后一个字。

输入文件:

 "id": 5918915, 

 "description": "Test Job - NA", 

 "revision": 5

预期产出:

 "id": 5918915, 

 "description": "Test Job - EU", 

 "revision": 5

因此,对于匹配description的行,请将最后一个单词替换为给定的单词。在这种情况下,在第2行中,使用NA",

替换最后一个单词EU",

我试过

sed -i '/"description"/s/.*/EU",//g' file_name

但它不起作用

2 个答案:

答案 0 :(得分:2)

sed -i -r '/^[ \t]*"description":.*/s/^(.* )NA",[\t ]*$/\1EU/'  FILE

 "id": 5918915, 
 "description": "Test Job - EU",
 "revision": 5"

要进行测试,请删除-i开关。

空格的数量不安静,所以我将[ \t]*放在行开头和结尾处,以获得随机大小的空白和制表符。

你的命令:

  sed -i '/"description"/s/.*/EU",//g' file_name

应该用EU",替换整行,而不仅仅是最后一个char序列。

-i是GNU-sed的一个选项。检查您的版本并阅读精细手册。如果您的sed缺少支持,则必须将输出重定向到文件sed "COMMANDS" INFILE > TMPFILE; mv TMPFILE INFILE。注意,sed "COMMANDS" INFILE > INFILE不起作用,但会立即销毁INFILE;一种流行的,聪明的,但不成功的想法。我也有。 :)

答案 1 :(得分:0)

我得到了工作命令sed -i' /" description" / s / [^] * * $ / EU",/' FILE_NAME