9

Это справочная страница для -n:

-n

подавить автоматическую печать пространства шаблона

Я заметил, что когда не используется -n для определенных операций, каждая строка печатается в стандартный вывод (и запрошенные строки печатаются дважды):

$ cat test.txt 
first
second
third
fourth
fifth

$ sed -n '2,3p' test.txt 
second
third

$ sed '2,3p' test.txt 
first
second
second
third
third
fourth
fifth

Однако этот закон не распространяется на другие команды:

$ sed -n 's/t/T/' test.txt 

$ sed 's/t/T/' test.txt 
firsT
second
Third
fourTh
fifTh

Так что же делать -n , точно?

1 ответ1

11

Обычно sed обрабатывает каждую строку (делает замены и т.д.), А затем печатает результат. Если обработка включает в себя печать строки (например, команды sed s p), то она печатается дважды (один раз во время обработки, затем снова с помощью автоматической печати после обработки). Опция -n отключает автоматическую печать, что означает, что строки, которые вы не указали специально для печати, не будут напечатаны, а строки, которые вы явно указали для печати (например, с помощью p), будут напечатаны только один раз.

  • sed -n '2,3p' test.txt - печатает только строки со 2 по 3, согласно запросу

  • sed '2,3p' test.txt - печатает каждую строку (автоматически), а также печатает строки 2-3 во второй раз

  • sed -n 's/t/T/' test.txt - заменяет "t" на "T" в каждой строке, но не выводит результат из-за -n

  • sed 's/t/T/' test.txt - заменяет "t" на "T" в каждой строке и автоматически печатает результат

И позвольте мне добавить еще несколько примеров:

  • sed -n 's/t/T/p' test.txt - заменяет "t" на "T" в каждой строке, печатает ТОЛЬКО строки, где произошла замена (то есть не "вторая")

  • sed 's/t/T/p' test.txt - заменяет "t" на "T" в каждой строке, печатает строки, в которых произошла замена, затем автоматически печатает каждую строку (результат: "секунда" печатается один раз, все остальные дважды)

  • sed '2,3p; 3p' test.txt - печатает строки 1, 4 и 5 один раз (автоматическая печать); строка 2 дважды (первая команда p затем автопечать) и строка 3 три раза (один раз для каждой команды p , затем снова автоматически).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .