
Он указан на странице руководства, more
которая f
используется для перехода вперед на k экранов текста (по умолчанию 1). Я сохранил очень длинный файл с помощью cat
и использовал more
его для отображения на экране страница за страницей, но когда я нажал f
на саму первую страницу, он не перемещается вперед, а отображается, ... skipping 29 lines
а затем файл закрывается, и возвращается приглашение. Когда я пытаюсь перемещаться с spacebar
его помощью, он работает правильно, как и ожидалось. Поскольку длина файла достаточно велика, он должен перемещаться вперед, пропуская 1 страницу каждый раз. Почему он показывает такое разное поведение?
решение1
Попробуйте провести такой эксперимент:
- Откройте терминал с 25 строками.
- Бегать
seq 1 1 100 > test_text
. - Бегать
more test_text
. - Посмотрите на предпоследнюю строку на экране. Она будет
24
. - Нажмите f, чтобыпропускатьстраница.
- Посмотрите на первую строку на экране. Там написано
49
.
fпропускает страницу текста. Итак, вы увидели первую "страницу" файла, нажали fи увидели третью страницу.
На этом этапе, если вы нажмете fеще раз, вы увидите ... skipping 24 lines
последние 4 строки файла. more
'выход, так как для отображения пятой страницы недостаточно строк.
Попробуйте снова, используя spaceвместо этого. spaceне пропускает страницы. Вы увидите все страницы.
Редактировать
Этот ответ относится к more version 5.19 (Berkeley 6/29/88), which is currently in use in the Linux community
(см.человек больше). Как сообщает @Kusalananda, результат «эксперимента» может различаться в разных версиях/юниксах.
Разница между а line
и аrow of text on a terminal
Часто эти два определения взаимозаменяемы. В этом случае важно их различать.
- Строка — это последовательность символов в текстовом файле, которая заканчивается символом новой строки (символом
\n
).wc -l
Команда подсчитывает количество строк в файле. Длина строки может быть любым числом от нуля до бесконечности. - Строка текста (на терминале) — это последовательность символов, отображаемых на терминале. Она имеет фиксированную длину, равную ширине терминала.
Мой первый «эксперимент» был слишком прост, все линии были (совершенно точно) короче строк.
В вашем файле, вероятно, строки намного длиннее строк. Чтобы отобразить их, more
разместим каждую строку на нескольких строках.
Давайте попробуем новый эксперимент:
Создайте файл
example
со следующим содержимым:006 XX\n010 XXYYYY\n015 XXYYYYZZZZZ\n
Это файл из 3 строк. Длина каждой строки в следующем порядке: 6, 10 и 15 символов. Не забудьте посчитать пробел после номера.
Результат
wc -l example
— 3.На 8-колоночном терминале вы должны увидеть что-то вроде
006 XX 010 XXYY YY 015 XXYY YYZZZZZ
Первая строка состоит из 8 символов:
006
+ пробел +XX
+ 2 пробела.Длина второй строки составляет 8 символов:
010
+ пробел +XXYY
.Длина 3-й строки — 8 символов:
YY
+ 8 пробелов.И т.д. и т.п.
Ваши 3 строки текста теперь превратились в 5 строк текста.
На странице руководства more
написано:
f Skip forward k screenfuls of text. Defaults to 1.
Это означает, что more
будет пропущено столько строк текста, чтобы заполнить все строки терминала.
решение2
но он отображается
...skipping 29 lines
, а затем файл закрывается и приглашение возвращается
Это происходит, когда вы нажимаете f
и достигаете конца документа.
Например: у вас есть файл из 40 строк, вы делаете more myfileof60lines.txt
, он отображает 29 первых строк, затем вы нажимаете f
, поэтому он пропустит 29 следующих строк, но перед этим он достигает конца документа. Таким образом, вы в конечном итоге видите ...skipping 29 lines
, и нормальное поведение, more
когда он достигает конца документа, которое является возвратом к приглашению.