【问题标题】:Replace a single string in file at specific position with multiple new strings用多个新字符串替换文件中特定位置的单个字符串
【发布时间】:2016-12-11 18:03:33
【问题描述】:

我想用一些新字符串替换文件中特定位置的单个字符串。假设我想在一个看起来像这样的文件中搜索“BAD”:

MAD
DAD
BAD
DAB
BED

所以现在我想将位置 3 的 BAD 替换为以下内容:

BAD-1
BAD-2
BAD-3

生成的文件应如下所示:

MAD
DAD
BAD-1
BAD-2
BAD-3
DAB
BED

我用 sed 尝试了一些东西:

sed "s/old/new/g" 

但这只会改变一行。 有任何想法吗?

感谢和问候!

【问题讨论】:

    标签: linux shell unix sed scripting


    【解决方案1】:

    这应该可行:

    sed 's/^BAD$/BAD-1\nBAD-2\nBAD-3/' file
    
    MAD
    DAD
    BAD-1
    BAD-2
    BAD-3
    DAB
    BED
    

    使用 awk 进行范围控制:

    awk -v n=3 '/^BAD$/{for(i=1; i<=n; i++) print "BAD-" i; next} 1' file
    

    【讨论】:

    • 谢谢!但是有没有办法简化这一步?也许有范围顺序序列?
    • 也许 OPS 需要 -i 标志。
    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2017-04-10
    • 2021-01-27
    • 2013-05-12
    • 2016-08-04
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多