【问题标题】:Sed use line number in replacementsed 在替换中使用行号
【发布时间】:2018-04-20 23:36:46
【问题描述】:

sed 知道它在哪一行,它可以把它放在一个替代品中吗? IE。查找所有出现的 foo 并替换为 (x) bar 其中 x 是行号

【问题讨论】:

  • 请在您的问题中添加示例输入和该示例输入所需的输出。
  • 我建议使用awk
  • 除了示例输入/输出之外,请添加您尝试过的内容..
  • 这个问题没有代码,没有示例输入,也没有预期的输出,但它得到了投票并发布了答案。嗯……
  • 问题还不够清楚吗?如果有人可以按照书面形式回答问题,则似乎不需要更多解释。 Stack Overflow 有一个安卓应用。有时人们用拇指打字。

标签: sed


【解决方案1】:

Sed 有一个命令=,它只将行号打印到标准输出。

你可以这样使用它:

sed '=' YOURFILE | sed 'N; s/^\([0-9]\+\)\(.*\)\(NEEDLE\)/\1\2(\1) REPLACEMENT/; s/^[0-9]\+\n//'

示例输入文件roses:

Roses are red,
Violets are blue,
sugar is sweet,
And so are you.

示例命令:

sed '=' roses | sed 'N; s/^\([0-9]\+\)\(.*\)\(blue\)/\1\2(\1) violet/; s/^[0-9]\+\n//'

示例输出:

Roses are red,
Violets are (2) violet,
sugar is sweet,
And so are you.

当然,使用 AWK 会更简单:

awk '{ gsub(/NEEDLE/,"("NR") REPLACEMENT") } 1' YOURFILE

等效示例:

awk '{ gsub(/blue/,"("NR") violet") } 1' roses

【讨论】:

  • 或带变量:awk -v search="blue" -v replace="violet" '{gsub(search,"(" NR ") "replace); print}' file
猜你喜欢
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
相关资源
最近更新 更多