Вы забываете, что действие по умолчанию SED состоит в том, чтобы распечатать каждое пространство шаблонов (строку) - поэтому подавить поведение по умолчанию, необходимое для добавления -N
выключатель
sed -n '1,4p' list
Ваше выражение скрипта будет выполняться на каждой строке в свою очередь.
Для выполнения выражений на линии, 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
необходимы для поставки нескольких выражений. / ^ / - / 'ничего не заменяет в начале строки -
.)