Interprétation de ~ in sed

9

J'apprends sed aujourd'hui. Il y a ce tilde '~' qui m'embrouille plus que tout.

Par exemple, la commande

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

imprime les lignes impaires (dans le fichier output.txt).

Dans le même didacticiel, il est également indiqué qu'il saute les lignes de 1 à 2, puis qu'il commence à imprimer les lignes à côté de la ligne numéro 2 au cas où nous utiliserions

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

Quelle est l'interprétation absolue de ce tilde?

Upendra Pratap Singh
la source
Que dit exactement le didacticiel pour le deuxième exemple? "saute les lignes de 1 à 2" n'est pas une description précise de ce que fait cette commande.
JigglyNaga

Réponses:

13

Il s'agit d'une sedextension GNU :

first~step

Faites correspondre chaque stepligne avec la ligne first. Par exemple, sed -n 1~2pimprimera toutes les lignes impaires du flux d'entrée et l'adresse 2~5correspondra toutes les cinq lignes, en commençant par la seconde. firstpeut être nul; dans ce cas, sedfonctionne comme s'il était égal à step. (Ceci est une extension.)

Vos deux exemples correspondent aux mêmes lignes, mais le premier les écrit ( w) dans un fichier tandis que le second les imprime ( p) partout où va la sortie standard.

En général, reportez-vous toujours au manuel de la commande. Le manuel est rarement ambigu. L'application d'une commande en combinant plusieurs aspects de ses fonctionnalités peut parfois être difficile à expliquer dans un didacticiel (et parfois un didacticiel essaie de rendre les choses plus faciles à comprendre en reformulant la même déclaration de plusieurs manières, ce qui pourrait conduire à la confusion), mais le manuel est la référence définitive pour chaque bit de ce que fait la commande agrégée.

Kusalananda
la source