Зазвичай sed обробляє кожен рядок (робить заміну тощо), після чого друкує результат. Якщо обробка включає в себе рядок, що друкується (наприклад, p
команда sed ), то він надрукується двічі (один раз під час обробки, потім знову шляхом автоматичного друку після обробки). Ця -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
команди, потім знову автоматично).
-n
друку видає кожен рядок на додаток до запитуваних рядків. Таким чином, у такому випадку-n
пригнічується друк кожного розібраного рядка . Однак у третьому та четвертому прикладах поведінка відрізняється. У цих випадках sed без-n
не виводить рядки двічі, таким чином, використання-n
не пригнічує друк кожного проаналізованого рядка, а швидше пригнічує друк рядків, які не були змінені . Мені важко узагальнити, коли поведінка буде тим чи іншим.