Как удалить первую строку в файле? - PullRequest
8 голосов
/ 16 апреля 2010

Я не могу найти определенную строку, поскольку все они очень похожи, но я бы хотел, чтобы что-то простое вырезало первые 4 строки в файле.

Они тоже все переменной длины. Я думал о Perl, и все это кажется сложнее, чем я думал, но я хотел бы сделать это в Perl, AWK или команде оболочки, если это возможно.

У кого-нибудь есть простой способ сделать это?

Ответы [ 10 ]

13 голосов
/ 16 апреля 2010
tail -n+2 filename

Пропустит первую строку в filename и выведет ее на стандартный вывод. Опция -n+2 означает запуск вывода строк, начинающихся со второй строки.

Конечно, вы можете заменить 2 любым нужным номером (ваш заголовок и фактическое содержание вопроса, скажем, первый и пятый соответственно).

7 голосов
/ 16 апреля 2010

sed самый простой. Чтобы удалить первую строку файла, выполните:

sed '1d' file.txt

Или, чтобы удалить первые четыре строки, выполните:

sed '1,4d' file.txt
5 голосов
/ 16 апреля 2010

пропустить первые 4 строки

$ awk 'NR>4' file >temp;mv temp file

$ more +5 file >temp;mv temp file

$ perl -i.bak -ne '$.>=4 && print' file
4 голосов
/ 16 апреля 2010
sed -i '1,4d' <filename>

удалит первые четыре строки своего входного файла.(Если вы хотите удалить только первую строку, вы можете использовать '1d'.)

Флаг -i обозначает редактирование на месте, что означает, что входной файл также является выходным файлом, иТаким образом, изменения записываются обратно в исходный файл.Если вы предпочитаете оставить файл без изменений, а измененное содержимое просто записать на стандартный вывод, просто пропустите -i.

. Этот и многие другие sed 1-вкладыши можно найти в удобной справкездесь:

http://sed.sourceforge.net/sed1line.txt

2 голосов
/ 16 апреля 2010
perl -pe'1..4and$_=""'

как эквивалент

sed 1,4d

или

perl -ne'1..4or print'

как эквивалент

sed -n '1,4!p'

Вы можете использовать -i так же, как в sed.

2 голосов
/ 16 апреля 2010
tail -n +5 file > temp
mv temp file
1 голос
/ 16 апреля 2010

Использовать File :: Tie. Это прекрасно.

1 голос
/ 16 апреля 2010

Решение, не требующее языка сценариев (например, awk, sed, perl и т. Д.):

tail -n `expr \`cat FILE | wc -l\` - 1` FILE > FILE.new; mv FILE.new FILE

Идея состоит в том, чтобы подсчитать количество строк в файле, затем вычесть одну, а затем передать результат команде 'tail'.

1 голос
/ 16 апреля 2010

Попробуйте это: sed -i 1d file

Общее правило:

Для удаления n первых строк: sed '1,nd' file.txt
Например: sed '1,4d' file.txt удалить первые 4 строки

0 голосов
/ 16 апреля 2010

Найдите в файле четвертый "\ r \ n" или "\ n" и подстроку из этого индекса.

...