1 votos

¿Dar STDIN de Sed?

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 linenumbers para búsqueda de otro comando. Realmente 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 debe estar salida

hello 
amigo
this line 3
and 5 is here

¿Cómo puede usted dar sed ésos linenumbers?

3voto

Básicamente, usted puede 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 un espacio, el uso de

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

En este caso, usted puede utilizar cualquier comando que genera una lista de número de línea en lugar de la < line-numbers.txt parte.


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 de nuevo, el comando puede ser cualquier cosa, la producción de la línea de números separados por ,)

1voto

jherran Puntos 6511

Otra manera es usando sed con xargs .

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

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

1voto

Jason Jarrett Puntos 123

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

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

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

Una prueba unitaria, reemplazar 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
$

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X