2012-09-05 17 views
9

Tengo un comando como este:¿Cómo pasar la salida de grep a sed?

cat error | grep -o [0-9] 

que se imprime solamente números como 2, 30 y así sucesivamente. Ahora deseo pasar este número a sed.

Algo así como:

cat error | grep -o [0-9] | sed -n '$OutPutFromGrep,$OutPutFromGrepp' 

¿Es posible hacerlo?

Soy nuevo en shell scripting. Gracias de antemano

+0

Por qué no pruebas ¿fuera? Tenga en cuenta que $ variables en comillas simples no se expanden. Si quieres eso, ponles comillas dobles en su lugar. –

+0

Intenté este 'eco cat error | grep -o [0-9] | sed -n "$ 1, $ 1" 'que da como resultado un error:' sed: -e expresión # 1, char 1: comando desconocido: ', '' – batman

+2

Con respecto a' cat error | grep -o [0-9] ': [Do not Grep the Cat] (http://www.terminally-incoherent.com/blog/2006/12/13/dont-grep-the-cat/). – Mehrwolf

Respuesta

4

Si la intención es imprimir las líneas que grep rendimientos, lo que genera una secuencia de comandos sed podría ser el camino a seguir:

grep -E -o '[0-9]+' error | sed 's/$/p/' | sed -f - error 
+1

Gracias. Copiar y pegar error, _tripleee_ lo arregló :-) – Thor

0

Sí, puede pasar la salida de grep a sed.

Tenga en cuenta que para hacer coincidir números enteros, debe utilizar [0-9] * no solo [0-9], que coincidiría con un solo dígito.

También tenga en cuenta que debe usar comillas dobles para obtener las variables expandidas (en el argumento sed) y parece que tiene un error tipográfico en el segundo nombre de la variable.

Espero que esto ayude.

2

Usted probablemente está buscando xargs, en particular la opción -I:

[email protected]:~$ xargs -I FOO echo once FOO, twice FOO 
hi 
once hi, twice hi 
there 
once there, twice there 

Su ejemplo:

[email protected]:~$ cat error 
error in line 123 
error in line 234 
errors in line 345 and 346 
[email protected]:~$ grep -o '[0-9]*' < error | xargs -I OutPutFromGrep echo sed -n 'OutPutFromGrep,OutPutFromGrepp' 
sed -n 123,123p 
sed -n 234,234p 
sed -n 345,345p 
sed -n 346,346p 

Para su uso en el mundo real, es probable que quieren transmitir un archivo de entrada sed y elimine el echo.

(Fixed su UUOC, por cierto.)

+0

+1 Agradable. 'error de gato | grep -o [0-9] + 'Después de esto tengo los * datos *, ¿cómo puedo pasarlos a' sed'? – batman