¿Para dar STDIN para Sed?

1

Pseudocommand

echo '1,2,3,5' | sed -n data.txt

que da

sed: 1: "data.txt": extra characters at the end of d command

Quiero dar a los números de lino para buscar desde otro comando. En realidad, awk está dando esos números de este hilo .

data.txt:

hello 
amigo
this line 3
and here we go 4
and 5 is here

donde debería estar la salida

hello 
amigo
this line 3
and 5 is here

¿Cómo puedes dar esos números de lino?

    
pregunta Léo Léopold Hertz 준영 15.06.2015 - 15:33

3 respuestas

3

Básicamente puedes hacer algo como

eval $(echo sed $(for i in 1 2 3 5; do echo "-e ${i}p"; done) -n data.txt )

Para leer los números de línea de un archivo que contiene los números, separados por espacio, use

eval $(echo sed $(for i in $(< line-numbers.txt); do echo "-e ${i}p"; done) -n data.txt )

En este caso, puede usar el comando cualquier que produce una lista de números de línea en lugar de la parte < line-numbers.txt .

O, si los números en el archivo están separados por ,

eval $(echo sed $(for i in $(tr \, ' ' < line-numbers.txt); do echo "-e ${i}p"; done) -n data.txt )

(y nuevamente, el comando puede ser cualquier cosa que genere números de línea separados por , )

    
respondido por el nohillside 15.06.2015 - 15:48
1

Otra forma es usar sed con xargs .

echo '1p;2p;3p;5p' filename | xargs sed -n

Básicamente, sed usa el formato <line-number>p para mostrar una línea. Puedes separar varias líneas usando ; .

    
respondido por el jherran 15.06.2015 - 18:19
1

Suponiendo que la salida de su comando awk es 1,2,3,5 , puede hacer esto:

sed -n $(my_awk_commamd | sed 's/,/p;/g;s/$/p;/') data.txt

El sed dentro de la sustitución del comando $( convierte 1,2,3,5 a la expresión sed 1p;2p;3p;5p; , que luego es interpretada por el sed externo sobre el archivo de datos.

Una prueba de unidad, que reemplaza awk con un simple echo :

$ sed -n $(echo '1,2,3,5' | sed 's/,/p;/g;s/$/p;/') data.txt 
hello 
amigo
this line 3
and 5 is here
$
    
respondido por el Digital Trauma 15.06.2015 - 19:46

Lea otras preguntas en las etiquetas