【问题标题】:replace string in a text file with the occurence of string用出现的字符串替换文本文件中的字符串
【发布时间】:2020-08-13 09:32:32
【问题描述】:

我正在尝试形成格式的长索引文件:

[1]
13 14 15 16 17 18
[2]
89 90 91 92 93 94
[3]
165 166 167 168 169 170
[4]
---------------------

我的文件格式为:

[index-i]
13 14 15 16 17 18
[index-i]
89 90 91 92 93 94
[index-i]
165 166 167 168 169 170
[index-i]
-------

如何使用脚本将括号中的“index-i”替换为“出现”

【问题讨论】:

  • 欢迎来到 SO,您能否在代码标签中编辑您的示例,因为目前尚不清楚。另外,请在您的问题中添加您的努力,然后让我们知道。
  • 那么,前一个数据集是预期输出,后一个是样本数据?你一定尝试过什么?
  • @Pragati:你有没有尝试过?
  • 你能澄清一下“与它的'发生'”的意思吗?

标签: linux shell awk sed gsub


【解决方案1】:

如果 longindex 包含您的输入文件

$ cat longindex 
[index-i]
13 14 15 16 17 18
[index-i]
89 90 91 92 93 94
[index-i]
165 166 167 168 169 170
[index-i]

然后你可以使用 awk(或 gawk)

$ gawk '/^\[/{print "[" ++i "]"; next;} {print}' longindex 
[1]
13 14 15 16 17 18
[2]
89 90 91 92 93 94
[3]
165 166 167 168 169 170
[4]

【讨论】:

  • ^1 可以缩写为awk '/^\[/{$0="["(++i)"]"} 1'。在与++number 连接时,您应该始终添加括号,以确保连接awk 的哪一侧应用++,否则它可能会将"[" ++i 读取为("["++) i,而不是您想要的"[" (++i)
【解决方案2】:

这可能对你有用(GNU sed 和 bash):

sed '/^\[/{g;s/.*/expr & + 1/e;h;s/.*/[&]/}' file

如果当前行以左方括号开头,则按如下方式处理该行。

用保留空间的内容替换当前行。

增加计数器。

更新保持空间。

用方括号括起来。

【讨论】:

    猜你喜欢
    • 2016-06-24
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2015-05-19
    • 2014-12-20
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多