Interpretação de ~ in sed

9

Estou aprendendo hoje em dia. Existe esse til '~' que me confunde mais do que tudo.

Por exemplo, o comando

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

está imprimindo as linhas numeradas ímpares (no arquivo output.txt).

No mesmo tutorial, também é possível ignorar as linhas de 1 a 2 e, em seguida, começa a imprimir as linhas próximas à linha número 2, caso usemos

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

Qual é a interpretação absoluta desse til?

Upendra Pratap Singh
fonte
O que exatamente o tutorial diz para o segundo exemplo? "pula linhas de 1 a 2" não é uma descrição precisa do que esse comando faz.
precisa saber é o seguinte

Respostas:

13

Esta é uma sedextensão GNU :

first~step

Combine cada stepquinta linha que começa com a linha first. Por exemplo, sed -n 1~2pimprimirá todas as linhas com números ímpares no fluxo de entrada e o endereço 2~5corresponderá a cada quinta linha, começando pela segunda. firstpode ser zero; neste caso, sedopera como se fosse igual a step. (Esta é uma extensão.)

Seus dois exemplos correspondem às mesmas linhas, mas o primeiro os grava ( w) em um arquivo enquanto o segundo os imprime ( p) para onde quer que a saída padrão esteja indo.

Em geral, sempre consulte o manual do comando. O manual raramente é ambíguo. Às vezes, pode ser difícil explicar a aplicação de um comando combinando vários aspectos de sua funcionalidade em um tutorial (e algumas vezes, um tutorial tenta facilitar a compreensão, reformulando a mesma declaração de várias maneiras, o que pode causar confusão), mas o manual é a referência definitiva para cada bit do que o comando agregado faz.

Kusalananda
fonte