unix - 仅当找到匹配字符串时才替换行的最后一个单词

标签 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

但它不起作用

最佳答案

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"INFILE > TMPFILE; mv TMPFILE INFILE.注意,sed "COMMANDS"INFILE > INFILE 将不起作用,但会立即销毁 INFILE;一个流行的、聪明的但不实用的想法。我也有过。 :)

关于unix - 仅当找到匹配字符串时才替换行的最后一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48927083/

相关文章:

linux - 如何使用shell从另一个文件中的相应条目中减去一个文件中的每个条目

bash - 执行带有 Bash 变量的命令并存储结果

regex - 查找/替换目录和 Bash 脚本

regex - sed 删除文本的不同部分

regex - 删除一个字符的单词

python - 如何在python中读取/dev/random

node.js - 无法从同一 Wi-Fi 连接到 Node 服务器

linux - Bash 在两个时间戳内合并文件(日志文件)

regex - sed:如何在 INI 文件中的部分末尾添加键/值对

regex - 如何在Linux中替换多行中的模式