remove all lines from a text file starting at first empty line

前端 未结 5 1037
一生所求
一生所求 2020-12-18 16:17

What is the best way to remove all lines from a text file starting at first empty line in Bash? External tools (awk, sed...) can be used!

Example

1:          


        
5条回答
  •  情歌与酒
    2020-12-18 16:47

    Bet there are some more clever ways to do this, but here's one using bash's 'read' builtin. The question asks us to keep lines before the blank in one file and send lines after the blank to another file. You could send some of standard out one place and some another if you are willing to use 'exec' and reroute stdout mid-script, but I'm going to take a simpler approach and use a command line argument to let me know where the post-blank data should go:

    #!/bin/bash
    
    # script takes as argument the name of the file to send data once a blank line
    # found
    found_blank=0
    while read stuff; do
        if [ -z $stuff ] ; then
                found_blank=1
        fi
        if [ $found_blank ] ; then
                echo $stuff > $1
        else
                echo $stuff
        fi
    done
    

    run it like this:

    $ ./delete_from_empty.sh rest_of_stuff < demo
    

    output is:

    ABC
    DEF
    

    and 'rest_of_stuff' has

    GHI
    

    if you want the before-blank lines to go somewhere else besides stdout, simply redirect:

    $ ./delete_from_empty.sh after_blank < input_file > before_blank
    

    and you'll end up with two new files: after_blank and before_blank.

提交回复
热议问题