【问题标题】:Editing a file by adding a prefix at specific places通过在特定位置添加前缀来编辑文件
【发布时间】:2014-10-22 14:32:54
【问题描述】:

我有一个如下所示的文件:

fixedStep chrom=20 start=1 step=1000   
0   
10   
20   
100   
0  
fixedStep chrom=19 start=1 step=1000   
0   
0   
50   
330   
450   
0

我想在chrom= 之后的数字上添加前缀chr。因此,我不想拥有chrom=20chrom=19,而是拥有chrom=chr20chrom=chr20。所以文件应该是这样的:

fixedStep chrom=chr20 start=1 step=1000   
0   
10   
20   
100   
0  
fixedStep chrom=chr19 start=1 step=1000   
0   
0   
50   
330   
450   
0

我知道使用sedcommand 可以做到这一点,但我不知道如何构造一个regex,它可以找到chrom=part。我已经使用sed修改了一些简单的东西,比如在文件的每一行的开头添加一个前缀;但我无法解决这个问题!

【问题讨论】:

    标签: regex bash unix sed


    【解决方案1】:

    你可以使用这个sed 命令:

    sed 's/\(chrom=\)/\1chr/g' file
    fixedStep chrom=chr20 start=1 step=1000
    0
    10
    20
    100
    0
    fixedStep chrom=chr19 start=1 step=1000
    0
    0
    50
    330
    450
    0
    

    \(chrom=\) 搜索 chrom= 并将其捕获到组 #1 中以用于替换模式 \1chr

    或者更简单:

    sed 's/chrom=/&chr/g' file
    

    【讨论】:

    • 酷!有效!只要stackoverflow 允许我这样做,我就会接受这个作为答案,显然,我必须再等 10 分钟!顺便问一下,网上有没有关于学习如何构建如此复杂的正则表达式的教程?提前感谢您的回复。 :)
    • 不客气,很高兴它成功了。 gnu's official doc on sed 是一个很好的起点。
    • 只是一个建议:sed 's/chrom=/&chr/g'
    • 谢谢@jaba10:我编辑了答案以添加它。
    【解决方案2】:
    sed 's/chrom=/chrom=chr/' filename
    

    输出:

    fixedStep 铬=chr20 开始=1 步=1000 0 10 20 100 0 fixedStep 铬=chr19 开始=1 步=1000 0 0 50 330 450 0

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 1970-01-01
      • 2013-07-24
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多