linux - 使用 sed 替换字符串
问题描述
我有一个字符串如下。使用 sed 我想用“66666”输入字符串替换名称后的值详细信息:“用户”和密码:
name: "user"
value: "55555"
username: "test"
value: "77777"
password : "55555"
预期输出:
name: "user"
value: "66666"
username: "test"
value: "77777"
password : "66666"
我尝试了以下但没有奏效。它只是替换密码而不是名称后的值
sed -i -e 's/\(password\|name: "[^"]*"{\n}value\): "[^"]*"/\1: "66666"/' test.txt
解决方案
尝试这个:
sed -e '/name: *"user"/{' -e ':a;' -e 'N;/password *:/!ba;' -e 's/\(value *: *\)"[^"]*/\1"66666/;s/\(password *: *\)"[^"]*/\1"66666/;}' test.txt
name: "user"
value: "66666"
username: "test"
value: "77777"
password : "66666"
sed
是一个流编辑器,默认情况下它分别读取和处理每一行。
在这里,我曾经N
阅读并附加下一行,并替换其中的内容。
我删除了-i
开关,所以你可以先在 shell 上测试它,当结果看起来不错时,你可以将它添加回来。
推荐阅读
- assembly - 尝试将字符串打印到控制台但是我得到了额外的字符,我不知道为什么
- javascript - 如何水平和垂直对齐输入和标签
- c# - C# 为什么结构类型的类字段占用的空间比结构的大小还要多?
- javascript - Next.js 在 Chrome 上使用 Ant Design 闪烁
- javascript - 如何在本机反应中将值传递给Formik的组件部分
- node.js - 创建一个 npm 命令来创建一个包含内容但末尾没有新行的文件
- c - 如何使我的函数适用于 C 中的任意维度
- inet - 是否可以在 INET 的 MAC 层协议中获取 Ipv4Header?
- settings - 如何调整视觉工作室(2015)中的设置以减少空间
- github - Github Auth 令牌在 auth.json 文件 Magento 2.4.2 中不起作用