Search code examples
unixsedawktr

Removing trailing / starting newlines with sed, awk, tr, and friends


I would like to remove all of the empty lines from a file, but only when they are at the end/start of a file (that is, if there are no non-empty lines before them, at the start; and if there are no non-empty lines after them, at the end.)

Is this possible outside of a fully-featured scripting language like Perl or Ruby? I’d prefer to do this with sed or awk if possible. Basically, any light-weight and widely available UNIX-y tool would be fine, especially one I can learn more about quickly (Perl, thus, not included.)


Solution

  • From Useful one-line scripts for sed:

    # Delete all leading blank lines at top of file (only).
    sed '/./,$!d' file
    
    # Delete all trailing blank lines at end of file (only).
    sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' file
    

    Therefore, to remove both leading and trailing blank lines from a file, you can combine the above commands into:

    sed -e :a -e '/./,$!d;/^\n*$/{$d;N;};/\n$/ba' file