Печатать содержимое файла без первой и последней строк

Есть ли простой способ эхо файла, пропуская первую и последнюю строки? Я смотрел на трубопровод с head до tail , но для тех, кому кажется, мне нужно было знать общие линии с самого начала. Я тоже смотрел на split , но я тоже не вижу способа сделать это с этим.

  • Как умножить элементы массива сами по себе
  • Как выровнять столбец в текстовом файле
  • Проблемы при объединении многих текстовых файлов рядом с пастой
  • распечатать все совпадения или заменить все строки в BIG-файле, который не является строковым (без разделителей строк)
  • Установить теорию с помощью инструментов unix: «расслабленное» пересечение двух списков, где элемент в наборе 1 является по меньшей мере подстрокой элементов в наборе 2
  • Как заменить IP на определенную линию
  • Печать всех N столбцов в новом файле
  • Как удалить все комментарии из файла, сохраняющего экранированные хэш-символы
  • 5 Solutions collect form web for “Печатать содержимое файла без первой и последней строк”

    Просто с sed , без каких-либо труб:

     sed '1d;$d' file.txt 

    ЗАМЕТКА

    • 1 означает первую строку
    • d означает удаление
    • ; является разделителем для 2 команд
    • $ означает последнюю строку

    Вам не нужно знать количество строк заранее. tail и head могут принимать смещение от начала или конца файла, соответственно.

    Эта труба начинается со второй строки файла (пропуская первую строку) и останавливается на последней, кроме одной (пропуская конечную строку). Чтобы пропустить более одной строки в начале или конце, отрегулируйте номера соответственно.

     tail -n +2 file.txt | head -n -1 

    делать это наоборот, работает одинаково, конечно:

     head -n -1 file.txt | tail -n +2 

    Вот как это сделать с awk :

     awk 'NR>2 {print t} {t=$0}' 

    Еще один способ для sed :

     sed '1d;x' file.txt 

    x – это расширенная команда sed , она переключает текущую строку с предыдущей: текущий идет в буфер, а предыдущий переходит на экран и так далее, в то время как поток обработки sed линию (поэтому первая строка будет пустой).

    awk на каждом шаге (строка) помещает текущую строку в переменную и начинает ее распечатывать только после прохождения второй строки. Таким образом, мы получили чередующуюся последовательность строк на экране от второго до последнего, кроме одного. Последняя строка опущена, поскольку строка находится в переменной и должна быть напечатана только на следующем шаге, но все шаги уже завершены, и мы никогда не видим строку на экране.

    Такая же идея в perl :

     perl -ne 'print $t if $.>2 ; $t=$_' file.txt 

    $. обозначает номер строки и $_ для текущей строки.
    perl -n является ярлыком для структуры while(<..>) {..} и -e для встроенного скрипта.

    Если вы хотите решить эту проблему, только используя команды «head» и «tail», то решение, предоставленное Olaf Dietsche, для этого вопроса работает отлично. Но опция head -n -1 не работает на Mac.

    Для пользователей Mac:

    На Mac голова -n-1 не работает. И я пытался найти простое решение (не беспокоясь о времени обработки), чтобы решить эту проблему только с помощью команд «head» и / или «tail».

    Я пробовал следующую последовательность команд и был доволен, что я могу решить это, просто используя команду «tail» [с параметрами, доступными на Mac]. Итак, если вы находитесь на Mac и хотите использовать только «хвост» для решения этой проблемы, вы можете использовать эту команду:

     cat file.txt | tail -r | tail -n +2 | tail -r 

    Объяснение:

    1. tail -r : просто меняет порядок строк на входе

    2. tail -n +2 : это печатает все строки, начиная со второй строки на своем входе

    Вы можете совместить это с решением, предоставленным Олафом Диетшем, для решения вашего вопроса.

    В python я бы сделал это.

     #!/usr/bin/python3 import re import sys file = sys.argv[1] with open(file, 'r') as f: L = [] for line in f: line = re.sub(r'\n', r'', line) L.append(line) print('\n'.join(L[1:-1])) 

    Вставьте вышеуказанный код в файл и назовите его как script.py . Запустите сценарий с файлом, с которым вы хотите проверить.

     python3 script.py /path/to/the/file 

    Пример:

     $ cat file foo apple banana bar $ python3 script.py file apple banana 
    Interesting Posts

    Указание исходящего интерфейса для туннеля SSH

    Можно ли добавить элемент в меню правой кнопки мыши Nautilus?

    Ждите ключа в сценарии оболочки, который может быть отправлен в / bin / bash

    Определите, загружается ли сервер с помощью выскочки или sysvinit

    Как повторить последовательность чисел в столбце с помощью команды awk

    Как я могу покрасить код файла журнала на основе сообщений об ошибках, предупреждениях и информации?

    Невозможно добавить большое количество правил в iptables

    сначала скопируйте самые маленькие файлы?

    Удаление набора записей, если найденный шаблон

    Предоставление одного файла нескольких значений inode

    NIS и / etc / passwd

    Openstack для домашнего облачного хостинга

    Где исполняемые файлы ищут общие объекты во время выполнения?

    Как определить размер изображения из командной строки?

    команда find вызывает ошибки при работе внутри

    Linux и Unix - лучшая ОС в мире.