【问题标题】:BASH - Delete lines and replace them by blank linesBASH - 删除行并用空行替换它们
【发布时间】:2014-06-05 20:25:09
【问题描述】:

我有一个文本文件,我想删除一些行用空白行替换它们。 示例:如果我有这个文件:

  1. 我在新的一天的迷雾中奔跑
  2. 远离新的一天的迷雾
  3. 我来了
  4. 我打猎

我想要这个输出:

  1. 我在新的一天的迷雾中奔跑
  2. 我打猎

这个命令我已经试过了,但是没有空行:

sed -i "$deb,$end"'d' body.txt(其中 $deb 和 $end 是行数)

您对如何使用 bash、sed 或 awk 获得这种输出格式有任何线索吗? (我不能使用 Perl)

谢谢!

【问题讨论】:

    标签: linux bash awk sed


    【解决方案1】:

    不删除,只用空值替换该行:

    sed -i "${deb},${end}s/.*//" body.txt 
    

    【讨论】:

    • 效果很好,谢谢!我使用这种格式在 bash 脚本中使用它(对不起,我在第一篇文章中没有提到)sed -i "$deb,$end"'s/.*//' body.txt
    【解决方案2】:

    试试这个 awk 命令,

    awk -v var1=2 -v var2=3 'NR==var1{gsub (/.*/,"")} NR==var2{gsub (/.*/,"")}1' file
    

    例子:

    $ awk -v var1=2 -v var2=3 'NR==var1{gsub (/.*/,"")} NR==var2{gsub (/.*/,"")}1' rr.txt
            Off through the new day's mist I run
    
    
            I hunt
    

    $ awk -v var1=$deb -v var2=$end 'NR==var1{gsub (/.*/,"")} NR==var2{gsub (/.*/,"")}1' rr.txt
            Off through the new day's mist I run
    
    
            I hunt
    

    【讨论】:

    • 试试NR<var1 || NR>var2 { print }
    • @Kaz op 也想要删除的行,看看预期的输出。
    • 对于空行,你只需要:NR>=var1 && NR <=var2 { print "" }
    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 2023-03-10
    • 2018-01-21
    • 1970-01-01
    • 2020-05-17
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多