【发布时间】:2021-05-08 05:16:26
【问题描述】:
我正在尝试查找两个连续行的模式,其中第一行是固定字符串,第二行是我喜欢替换的部分子字符串。
这将在 macOS 上的 sh 或 bash 中完成。
如果我手头有一个可以对整个文本进行操作的正则表达式工具,这对我来说会很容易。但是,我发现的只是 bash 的简单文本替换 - 不适用于正则表达式,以及面向行的 sed。
我怀疑我可以使用sed 的方式,它首先找到匹配的第一行,然后如果它的模式也匹配,然后才寻找替换下一行,但我无法弄清楚。
或者 macOS 上是否有其他工具可以让我对整个文件或字符串进行基于正则表达式的搜索和替换?也许用 Python(安装了 v2.7 和 v3)?
这是一个示例文本以及我喜欢它的修改方式:
keyA
value:474
keyB
value:474 <-- only this shall be replaced (follows "keyB")
keyC
value:474
keyB
value:474
现在,我想查找第一行是“keyB”且下一行是“value:474”的所有出现,然后将第二行替换为另一个值,例如“价值:888”。
作为一个忽略行分隔符的正则表达式,我会这样写:
- 搜索:
(\bkeyB\n\s*value):474 - 替换:
$1:888
所以,基本上,我找到 474 之前的模式,然后用相同的模式加上新的数字 888 替换它,从而保留原始缩进(可变)。
【问题讨论】:
-
试试
sed '/keyB$/{n;s/\(.*\):[0-9]*/\1:888/}' file或sed -e '/keyB$/{n' -e 's/\(.*\):[0-9]*/\1:888/' -e '}' file