【发布时间】:2022-01-06 17:47:05
【问题描述】:
尝试让 sed 或 awk 执行以下操作:
- 浏览文件
- 捕获字符串 + 正则表达式 (
remote_addrs.*) - 将整行替换为不同的内容,因此“包含“remote_addrs”及其后的任何内容的行”替换它。
示例文件:
dog
cat
remote_addrs = 1.1.1.1
moose
remote_addrs = 2.2.2.2
woodchuck
想要改成这样: 示例文件:
dog
cat
remote_addrs = 1.1.1.1
moose
remote_addrs = 3.3.3.3
woodchuck
尝试使用以下方法:
sed -z 's/remote_addrs.*/remote_addrs\ =\ 3.3.3.3/2' file
sed ':a;N;$!ba;s/remote_addrs.*/remote_addrs\ =\ 3.3.3.3/2' file
但 sed 拒绝在那次发生后替换所有内容。这似乎只适用于单个字符串。
这必须在不提供具体行号的情况下完成,“remote_addrs”的行位置必须是可变的。
【问题讨论】:
-
你为什么要逃离这个空间,尤其是
3?\3是对第 3 组的反向引用,并且您的正则表达式中没有单个组。 -
@WiktorStribiżew woops,已编辑,“\”在错误的位置。谢谢。