Есть ли способ head
/ tail
документ и получить обратный вывод; потому что вы не знаете, сколько строк в документе?
Т.е. я просто хочу получить все, кроме первых двух строк, foo.txt
чтобы добавить к другому документу.
text-processing
tail
head
chrisjlee
источник
источник
\n
" . Он работает для всех отрицательных целых чисел, кроме тех,-n -0
которые вообще ничего не возвращают , как если-n 0
бы (используя: head (GNU coreutils) 7.4) ... Однако, когда присутствует трейлинг\n
,-n -0
выводит как и следовало ожидать от-
, т.е. он печатает весь файл ... Так что он работает для всех ненулевых отрицательных значений ... но-0
завершается неудачно, когда нет трейлинга\n
head -n -2
не совместим с POSIX .Если вы хотите все, кроме первых N-1 строк, звоните
tail
с количеством строк+N
. (Число - это номер первой строки, которую вы хотите сохранить, начиная с 1, т.е. +1 означает начало сверху, +2 означает пропуск одной строки и т. Д.).Нет простого, портативного способа пропустить последние N строк. GNU
head
позволяетhead -n +N
в качестве аналогаtail -n +N
. В противном случае, если у вас естьtac
(например, GNU или Busybox), вы можете объединить его с tail:В частности, вы можете использовать фильтр awk (не проверено):
Если вы хотите удалить последние несколько строк из большого файла, вы можете определить смещение в байтах фрагмента для усечения, а затем выполнить усечение
dd
.Вы не можете обрезать файл на месте в начале, хотя, если вам нужно удалить первые несколько строк огромного файла, вы можете перемещать содержимое .
источник
Со
tail
страницы руководства (tail
то есть GNU ):Таким образом, следующий должен приложить все , но первые 2 строки
somefile.txt
вanotherfile.txt
:источник
Для удаления первых n строк можно использовать GNU sed. Например, если n = 2
Имеется в
!
виду «исключить этот интервал». Как вы можете себе представить, более сложный результат может быть получен, например,это покажет строку 3,4,5,7. Больше силы приходит от использования регулярных выражений вместо адресов.
Ограничение заключается в том, что номера строк должны быть известны заранее.
источник
sed 1,2d
? Проще обычно лучше. Кроме того, ничто в ваших примерах не относится к GNU Sed; все ваши команды используют стандартные функции Sed POSIX .Вы можете использовать,
diff
чтобы сравнить выводhead
/tail
с исходным файлом, а затем удалить то же самое, получая обратное.источник
Хотя
tail -n +4
вывод файла, начинающегося с 4-й строки (все, кроме первых 3 строк), является стандартным и переносимым, егоhead
аналог (head -n -3
все, кроме последних 3 строк) - нет.Портативно, вы бы сделали:
Или же:
(имейте в виду, что в некоторых системах, где
sed
имеется шаблонное пространство ограниченного размера, оно не масштабируется до больших значенийn
).Или же:
источник
Если
<infile
это обычный,lseek()
-able файл, то да , конечно, не стесняйтесь. Выше приведена полностью поддерживаемая POSIXly конструкция.источник
Мой подход похож на Жиля, но вместо этого я просто переворачиваю файл с помощью команды cat и pipe, используя команду head.
tac -r thefile.txt | head thisfile.txt (заменяет файлы)
источник
Надеюсь, я ясно понял вашу потребность.
У вас есть несколько способов выполнить ваш запрос:
Где / etc / passwd - ваш файл
Второе решение может быть полезным, если у вас большой файл:
источник
Решение для BSD (macOS):
Удалить первые 2 строки:
Удалить последние 2 строки:
... не очень элегантно, но выполняет свою работу!
источник