我正在重构一些shell脚本,我遇到了像这样的sed命令:
sed -i "/^$t=/ s/^$t=.*$/$str/" $fil
我理解替换的作用。我可以看到结果,但我想知道空间之前命令的哪一部分。它看起来像一个简单的匹配,但这似乎是非常不必要的。
答案 0 :(得分:0)
你是对的:sed '/pattern/ s/find/replace/'
在匹配/pattern/
的行中执行替换。
在3.1. How sed works中我们读到了:
sed维护两个数据缓冲区:活动模式空间和辅助保持空间。两者最初都是空的。
sed通过在每行输入上执行以下循环来操作:首先,sed从输入流中读取一行,删除任何尾随换行符,并将其放置在模式空间中。然后执行命令;每个命令都可以有一个与之关联的地址:地址是一种条件代码,只有在执行命令之前验证条件时才执行命令。
然后我们看到:
3.2使用sed选择行
/regexp/
这将选择与正则表达式regexp匹配的任何行。如果regexp本身包含任何/字符,则必须使用反斜杠()对每个/字符进行转义。 空正则表达式'//'重复最后一个正则表达式匹配(如果将空正则表达式传递给s命令,则相同)。请注意,在编译正则表达式时会计算正则表达式的修饰符,因此将它们与空正则表达式一起指定是无效的。
最后,s/
表达式定义于:
3.5 s命令
s(在替换中)命令的语法是's / regexp / replacement / flags'。 /字符可以由任何给定s命令中的任何其他单个字符统一替换。 /字符(或其他任何字符代替它)只有在前面带有\字符时才会出现在regexp或replacement中。