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


54

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

Ответы:


97

Просто sedбез труб:

sed '1d;$d' file.txt

НОТА

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

36

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

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

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

делая наоборот, работает так же, конечно:

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

Я не знаю почему, но head -n -1удаляет первую И последнюю строку моего .txtфайла в Ubuntu 14.04.2LTS.
Сопалахо де Арриерес

9

Вот как это сделать 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для встроенного скрипта.


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

2

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

На Mac head -n -1не работает. Вместо этого переверните файл, отрежьте первую строку, а затем переверните ее обратно:

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

Объяснение:

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.