仅当找到匹配的字符串时,我才想替换该行的最后一个单词。
输入文件:
"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/