我有一个像这样的字符串:
schedule="0.25"
我想0.25
用0.50
我可以通过以下方式实现这一目标:
sed 's/\"....\"/\"0\.50\"/g'
问题是我不知道双引号之间的值,因此我不知道长度。它可以是任何值,但总是以schedule=
.
我有一个像这样的字符串:
schedule="0.25"
我想0.25
用0.50
我可以通过以下方式实现这一目标:
sed 's/\"....\"/\"0\.50\"/g'
问题是我不知道双引号之间的值,因此我不知道长度。它可以是任何值,但总是以schedule=
.
您可以使用
[^"]*
来匹配零个或多个非"
字符的序列。所以看起来您只想用 . 替换等号之后的任何内容
"0.50"
。这很容易做到awk
:该
awk
程序专门查找第一个=
分隔字段为 的记录schedule
。找到后,它将第二个字段替换为"0.50"
。如果
0.50
是变量,您可以awk
像这样将此值传递给脚本:显然,如果
schedule
也可能有所不同,使用
sed
,您可以忽略 之后的任何内容=
并将其替换为您想要的任何内容:为了确保我们只替换 的值
schedule
,而不是其他设置的值,这对我们的替代提出了条件;
schedule=
该行的开头必须有字符串才能触发。我们甚至可以在表达式中插入 shell 变量
sed
,但请注意,我们必须确保这些变量的值不会破坏sed
语法(通过包含影响匹配或命令分隔的字符):与
awk
示例相反,这里我们依靠 shell 将变量的值注入到sed
编辑脚本中。在变量的值不受我们控制的情况下(例如当我们从用户提供的源中读取它们时),这通常会被归类为代码注入漏洞。如果您从 bash 脚本/终端调用 sed/awk,那么您可以避免使用外部工具并利用 bash 自己的字符串处理功能: