用另一个字符串替换文件中的一个字符串

Vik*_*kyi 3 sed regular-expression replace

我有一堆配置文件,如下所示:

reader_0 = newcamd({
name = "Oct 1",
host = "hostname 1",
port = 27020,
user = "UNAME",
pass = "password1",
key  = "0102030405060708091011121314",
})

reader_1 = newcamd({
name = "Oct 2",
host = "hostname 2",
port = 27020,
user = "UNAME",
pass = "password2",
key  = "0102030405060708091011121314",
})
Run Code Online (Sandbox Code Playgroud)

如何使用sed将“reader_1”部分中的端口号 27020 替换为另一个端口号,例如 22443 ?

谢谢你。

Jef*_*ler 6

使用 sed 的前身 ed:

ed -s input <<< $'/^reader_1 =\n/^port =\nc\nport = 22443,\n.\nw\nq'
Run Code Online (Sandbox Code Playgroud)

这会发送ed一个 ANSI 引用的 here-string 命令来编辑文件。这些命令依次为:

  1. /^reader_1 = -- 搜索以“reader_1 =”开头的行
  2. /^port = -- 从那里向前搜索以“port =”开头的行
  3. c -- 改变那条线
  4. port = 22443, -- 到那个文本
  5. . -- 结束替换文本
  6. w -- 将文件写入磁盘
  7. q - 退出 ed

根据您的实际数据,您可以收紧或放松正则表达式以或多或少地仔细匹配。