Интерпретация ~ в седе

9

Я учусь сегодня. Эта тильда '~' смущает меня больше всего на свете.

Например, команда

sed -n '1~2 w output.txt' input.txt

печатает нечетные строки (в файл output.txt).

В том же учебнике также указано, что он пропускает строки от 1 до 2, а затем начинает печатать строки рядом со строкой 2, если мы используем

sed -n '1~2 p' input.txt

Какова абсолютная интерпретация этой тильды?

Упендра Пратап Сингх
источник
Что именно говорит учебник для второго примера? «пропускает строки от 1 до 2» не является точным описанием того, что делает эта команда.
JigglyNaga

Ответы:

13

Это sedрасширение GNU :

first~step

Соответствуйте каждой step'-ой строке, начинающейся со строки first. Например, sed -n 1~2pбудут напечатаны все нечетные строки во входном потоке, а адрес 2~5будет совпадать с каждой пятой строкой, начиная со второй. firstможет быть ноль; в этом случае sedдействует так, как если бы он был равен step. (Это расширение.)

Два ваших примера соответствуют одинаковым строкам, но первый записывает ( w) их в файл, а второй печатает ( p) их везде, куда идет стандартный вывод.

В общем, всегда обращайтесь к руководству команды. Руководство редко неоднозначно. Применение команды путем объединения нескольких аспектов ее функциональности иногда бывает трудно объяснить в учебном пособии (а иногда учебное пособие пытается упростить понимание, перефразируя одно и то же утверждение многими способами, что может привести к путанице), но Руководство является определенной ссылкой для каждого бита, что делает агрегированная команда.

Кусалананда
источник