Ответы:
Просто 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для встроенного скрипта.
В 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
Для пользователей Mac:
На Mac head -n -1не работает. Вместо этого переверните файл, отрежьте первую строку, а затем переверните ее обратно:
tail -r file.txt | tail -n +2 | tail -r
Объяснение:
tail -r : меняет порядок строк на входе
tail -n +2 : печатает все строки, начиная со второй строки в своем вводе
head -n -1удаляет первую И последнюю строку моего.txtфайла в Ubuntu 14.04.2LTS.