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

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

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 
  • Поиск последнего символа файла и добавление строки после этого?
  • Определите, как долго вкладки \ t 'находятся на линии
  • Отображать только повторяющиеся строки, игнорируя первые пробелы x на строку
  • Удаление первого ^ М из каждой строки файла
  • Сочетание текста по сплошным линиям с ключом?
  • Переименование текстового файла с помощью скрипта
  • Обратный порядок пар строк текстового файла
  • Добавить числа в поле в файле
  • Как удалить двойные кавычки и точки из файла
  • отображать содержимое файла с начала до многострочного шаблона
  • Как я могу удалить весь текст между вложенными фигурными скобками в многострочном текстовом файле?
  • Interesting Posts

    Поддерживается ли CentOS PPC64 программой Freescale T2080 RDB?

    socat два последовательных порта вместе

    Инструмент Linux для мониторинга потребления полосы пропускания определенного процесса (PID)

    добавьте «проверить, запущен ли fetchmail» в этот скрипт

    Как включить сжатие HTTP?

    / dev / tcp прослушать вместо nc listen

    Как заставить убийцу OOM регистрироваться в / var / log / messages, когда он убивает какой-либо процесс?

    Автомобильный диск, подключенный через USB, когда компьютер включен

    как изменить полную строку с помощью опции sed c

    sed – изменить линии, которые начинаются с одного данного слова и заканчиваются другим?

    Странное поведение libev / epoll

    Debian устанавливает менее 1 ГБ.

    Как определить, каким образом программное обеспечение установлено на Linux

    Получить узел устройства с помощью пары основных / младших номеров

    Можно ли использовать `type`, чтобы проверить, является ли произвольное имя допустимым именем команды?

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