Remove the last line from a file in Bash
bash, command-line, scripting, truncate
Solution
Using `GNU sed`:
sed -i '$ d' foo.txt
The `-i` option does not exist in `GNU sed` versions older than 3.95, so you have to use it as a filter with a temporary file:
cp foo.txt foo.txt.tmp
sed '$ d' foo.txt.tmp > foo.txt
rm -f foo.txt.tmp
Of course, in that case you could also use `head -n -1` instead of `sed`.
MacOS:
On Mac OS X (as of 10.7.4), the equivalent of the `sed -i` command above is
sed -i '' -e '$ d' foo.txt
Problem
I have a file, `foo.txt`, containing the following lines: ``` a b c ``` I want a simple command that results in the contents of `foo.txt` being: ``` a b ```