How to remove empty lines from begin and end of file?
Try this,
To remove blank lines from the begin of a file:
sed -i '/./,$!d' filename
To remove blank lines from the end of a file:
sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' file
To remove blank lines from begin and end of a file:
sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' file
From man sed,
-e script, --expression=script -> add the script to the commands to be executed
b label -> Branch to label; if label is omitted, branch to end of script.
a -> Append text after a line (alternative syntax).
$ -> Match the last line.
n N -> Add a newline to the pattern space, then append the next line of input to the pattern space. If there is no more input then sed exits without processing any more commands.
This little awk program will remove empty lines at the start of a file:
awk 'NF {p=1} p'
So we can combine that with tac
that reverses lines and get:
awk 'NF {p=1} p' file | tac | awk 'NF {p=1} p' | tac
line1
line2
Stealing @guillermo chamorro's command substitution trick:
awk 'NF {p=1} p' <<< "$(< file)"
If the file is small enough to fit memory requirements:
$ perl -0777 -pe 's/^\n+|\n\K\n+$//g' ip.txt
line1
line2
-0777
to slurp entire input file^\n+
one or more newlines from start of string\n\K
to prevent deleting newline character of last non-empty line\n+$
one or more newlines at end of string