代码之家  ›  专栏  ›  技术社区  ›  Saeed

在Linux中,如何用sed或awk或任何其他程序将一个字符串替换为第3行(n)中的另一个字符串,以及每隔n+6行(如9、15、24等等)替换一个字符串?

  •  0
  • Saeed  · 技术社区  · 4 年前

    我在一个 .txt n 以及每一个 n+6

    以下是当前状态的一个示例:

    domain_name = {'name': 'aaa.pro'
    'register': 159.00
    'register': 159.00
    'register': 159.00
    'currency': USD
    
    domain_name = {'name': 'abogado'
    'register': 40.50
    'register': 40.50
    'register': 40.50
    'currency': USD
    
    domain_name = {'name': 'academy'
    'register': 34.50
    'register': 34.50
    'register': 34.50
    'currency': USD
    

    我希望结果是:

    domain_name = {'name': 'aaa.pro'
    'register': 159.00
    'renew': 159.00
    'register': 159.00
    'currency': USD
    
    domain_name = {'name': 'abogado'
    'register': 40.50
    'renew': 40.50
    'register': 40.50
    'currency': USD
    
    domain_name = {'name': 'academy'
    'register': 34.50
    'renew': 34.50
    'register': 34.50
    'currency': USD
    

    所以3号线 n ,然后是第9行、第15行等等(n+6),其中包含 register 字符串应替换为 renew 字符串。

    我读过了 sed awk 但我不明白如何准确到达这个位置。

    你能帮帮我吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   RavinderSingh13 Nikita Bakshi    4 年前

    请你试试下面的。

    awk -v n="3" 'FNR==n{sub(/register/,"renew");n+=6} 1' Input_file
    

    说明: 提到 -v n="3" n 它的价值是 3 . 然后检查状况 FNR==n 查看当前行号是否与 然后进入街区 {...} sub 用renew HERE替换寄存器,然后在n的当前值上加6并将其保存到 n 1 将打印当前行。

        2
  •  0
  •   potong    4 年前

    这可能对您有用(GNU-sed):

    sed -i '3~6s/register/renew/' file
    

    renew 对于 register 在文件中编辑和放置。