44

Do you have a method to quickly remove the first line of a file in bash shell ? I mean using sed or stuff like that.

1

3 Answers 3

69

One-liners in reverse order of length, portable unless noted.

sed (needs GNU sed for -i):

sed -i 1d file

ed (needs e.g. bash for $'...' expansion and here string):

ed file <<< $'1d\nw\nq'

awk:

awk NR\>1 infile > outfile

tail:

tail -n +2 infile > outfile

read + cat:

(read x; cat > outfile) < infile

bash built-ins:

while IFS= read -r; do ((i++)) && printf %s\\n "$REPLY" >> outfile; done < infile
3
  • 4
    or ed file1 <<< $'1d\nw\nq' Commented May 16, 2011 at 14:58
  • 1
    In my case, tail is 15 times slower than sed. tail needs 13.5s, sed needs 0.85s. My file has ~1M lines, ~100MB. MacBook Air 2013 with SSD. Commented Feb 1, 2016 at 16:26
  • I like the awk cmd the best. Commented Dec 6, 2021 at 20:20
20
$ tail -n +2 <<< $'1\n2\n3'
2
3
0

Using dd

fn="The-BIG-FILE.txt"
fll=$(( $(head -n 1 $fn | wc -c) + 1))
dd if="$fn" of="${fn}.out" bs=1M iflags=skip_bytes skip=$fll
echo "Files differ by $(( $(find $fn* -printf "%s - \n" ; echo "0") )) bytes. First line of $fn is $fll bytes."

Add any iflags= and oflags= you might need - with commas separating them.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.