Interpretación de ~ in sed

9

Estoy aprendiendo sed hoy en día. Existe esta tilde '~' que me confunde más que nada.

Por ejemplo, el comando

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

está imprimiendo las líneas impares (al archivo output.txt).

En el mismo tutorial, también se da cuenta de que omite las líneas de 1 a 2 y luego comienza a imprimir las líneas junto a la línea número 2 en caso de que usemos

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

¿Cuál es la interpretación absoluta de esta tilde?

Upendra Pratap Singh
fuente
¿Qué dice exactamente el tutorial para el segundo ejemplo? "omite líneas de 1 a 2" no es una descripción precisa de lo que hace ese comando.
JigglyNaga

Respuestas:

13

Esta es una sedextensión de GNU :

first~step

Haga coincidir cada steplínea que comienza con la línea first. Por ejemplo, sed -n 1~2pimprimirá todas las líneas impares en la secuencia de entrada y la dirección 2~5coincidirá con cada quinta línea, comenzando con la segunda. firstpuede ser cero; en este caso, sedopera como si fuera igual a step. (Esta es una extensión).

Sus dos ejemplos coinciden con las mismas líneas, pero el primero los escribe ( w) en un archivo mientras que el segundo los imprime ( p) en cualquier lugar donde vaya la salida estándar.

En general, consulte siempre el manual del comando. El manual rara vez es ambiguo. La aplicación de un comando combinando varios aspectos de su funcionalidad puede ser difícil de explicar en un tutorial a veces (y a veces un tutorial intenta hacer que las cosas sean más fáciles de entender al reformular la misma declaración de muchas maneras, lo que podría generar confusión), pero El manual es la referencia definitiva para cada bit de lo que hace el comando agregado.

Kusalananda
fuente