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?


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.