将 pattern1 行存储在缓冲区中并用它来替换 pattern2

store a pattern1 line in buffer and use it to replace the pattern2

文件:

url: urlvalue
name: 
organisation:
word

如何提取 urlvalue 并将其添加到 name: 中,以便最终输出为。

url: urlvalue
name: urlvalue
organisation:
word

正则表达式查找模式并复制,但通过编辑模式的第一个单词 例如。在上面找到带有 ^url 的行,在该行下方添加同一行的副本,但将 url: 更改为 name:

另请查询以下内容: 我如何在 awk 或 sed 中否定多个正则表达式?

例如。所有不以名称、组织和 url 开头的行 ---> apped pass: as prefix to those lines

尝试过:

awk ' != "url*" &&  != "name*" &&  != "organisation*" { = "pass"} {print}'

也尝试过:

awk ' != "url*" &&  != "name*" &&  != "organisation*" {gsub(/^/, pass:, "g", ) {print}'

不工作

另一个尝试过的解决方案部分有效

awk ' != "url:" &&  != "name:" &&  != "organisation:" {print "pass"[=14=]}'

但它只输出

pass:word

期望的输出:

url: urlvalue
name: urlvalue
organisation:
pass:word

假设可以忽略任何以 name: 开头的现有行,并且您只想复制每个 url: 行并将 url: 更改为 name:,以下可能适合:

$ sed -n '/^name:/!p; s/^url:/name:/p' file
url: urlvalue
name: urlvalue
organisation:

-n 禁用自动打印。 p打印所有不以“name:”开头的行。然后在 s/// 命令中使用 p 标志,打印以“url:”开头的行,并将其更改为以“name:”开头。

awk相同的想法:

$ awk '!/^name:/; sub(/^url:/, "name:")' file
url: urlvalue
name: urlvalue
organisation:

终于成功了

awk ' != "url:" &&  != "name:" &&  != "organisation:" {gsub(/^/,"pass:",)} {print}'