Почему '1,4p' вывод все строки вместо просто первых четырех?

[113174] Откройте файл [113656]template.php[113657] с помощью vi-редактора. После его открытия нажмите кнопку вызова и введите код ниже.

1
10.04.2015, 06:29
3 ответа

Вы забываете, что действие по умолчанию SED состоит в том, чтобы распечатать каждое пространство шаблонов (строку) - поэтому подавить поведение по умолчанию, необходимое для добавления -N выключатель

sed -n '1,4p' list
13
27.01.2020, 23:10

Используйте это:

sed -n 1,4p list

или это:

sed '1,4!d' list

Еще примеры

3
27.01.2020, 23:10

Что он имеет в целом

Ваше выражение скрипта будет выполняться на каждой строке в свою очередь.

Для выполнения выражений на линии, SED сначала скопируют его в пространство .
Затем все выражения выполняются, каждый из которых использует пространство шаблона в качестве ввода и записи результата обратно в пространство шаблона.

Так что обычно, когда выполняются этапы работы для линии, у нас есть окончательная строка в пространстве шаблона. В большинстве случаев мы хотим только что в качестве вывода, например, после того, как он был изменен несколькими // командами.
Потому что это часто полезно, SED распечатывает конечное пространство шаблона, как если бы он мог добавить p .

Вы уже можете увидеть, что это вызывает вывод вашей команды.

  • Линия вкладывается в пространство шаблона
  • Ваш скрипт печатает пространство шаблона для четырех сопоставленных линий с использованием P
  • Это не обновляет пространство шаблона, когда он заканчивается.
  • Как уже в конце списка выражений, Пространство шаблона напечатано, поскольку это сделано по умолчанию

Примечание. Это выводит «все линии и первые четыре« - в отличие от «всех строк, а не только первых четырех».

Итак, повторных линий, первый из каждого из них - это то, что вы напечатали, а второй - это то, что напечатано по умолчанию.

Опция SED -N ( - Тишина - Тихие ) Переключатели ) Переключатели по умолчанию Печать пространства шаблона:

sed -n 1,4p list

, чтобы увидеть, какая ваша оригинальная команда Делает, мы можем сделать оба вида строк по-разному: мы изменяем пространство шаблонов перед принтом его в конце, префиксировав его с - :

$ sed -e '1,4p' -e 's/^/- /'  list
he
- he
she
- she
we
- we
his
- his
- her
- with
- his this this -- this
- this

(параметры -E необходимы для поставки нескольких выражений. / ^ / - / 'ничего не заменяет в начале строки - .)

1
27.01.2020, 23:10

Теги

Похожие вопросы