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

Unix 仅在找到匹配字符串时替换行的最后一个字,unix,sed,Unix,Sed,我只想在找到匹配字符串时替换行的最后一个字 输入文件: "id": 5918915, "description": "Test Job - NA", "revision": 5 预期产出: "id": 5918915, "description": "Test Job - EU", "revision": 5 因此,对于匹配说明的行,用给定的单词替换最后一个单词。在这种情况下,在第2行中,将最后一个单词NA“,替换为EU”, 我试过了 sed -i '/"desc

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

输入文件:

 "id": 5918915, 

 "description": "Test Job - NA", 

 "revision": 5
预期产出:

 "id": 5918915, 

 "description": "Test Job - EU", 

 "revision": 5
因此,对于匹配
说明
的行,用给定的单词替换最后一个单词。在这种情况下,在第2行中,将最后一个单词
NA“,
替换为
EU”,

我试过了

sed -i '/"description"/s/.*/EU",//g' file_name
但它不起作用

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“,
,而不仅仅是最后一个字符序列


i是GNU sed的一个选项。请检查您的版本并阅读详细手册。如果您的sed缺少支持,则必须将输出重定向到文件
sed“COMMANDS”infle>TMPFILE;mv TMPFILE infle
。注意,
sed”命令“infle>infle
将不起作用,但会立即销毁infle;一个流行的、聪明的但不实用的想法。我也有

我得到了工作指令

sed -i '/"description"/ s/[^ ]* *$/EU",/' file_name

我正在尝试sed命令,类似于sed-I'/“description”/s/*/EU“,//g”文件名,但它不工作。因此,寻找合适的sed命令请更新您尝试过的命令的问题。您是否已设置为此使用
sed
,或者是否可以选择其他工具?而且,输入数据看起来有点像不完整的JSON。您实际上是在处理json,还是其他公认的格式?还是自定义的?@ghoti..是的,我正在尝试更新JSON文件,在编写shell脚本时,sed是我熟悉的选项。无论如何,我得到了工作命令sed-I'/“description”/s/[^]**$/EI“,/”文件名可以简化..例如:
/“description”/s/[^]**$/EU“,/
(如果需要,将空格替换为
[:blank:///code>)有什么更简单的吗?谢谢大家,我得到了工作命令sed-I'/“description”/s/[^]**$/EU“,/”文件_name@Ankur:是的,您需要-i进行持久更改,而不仅仅是在输出中,如果没有括号,您不需要-r。我认为您无法获得特定于标记的快捷方式。可以说,这应该在中更清楚地阐明,并且应该更容易与之链接。