2012-07-13 20 views
76

Estoy escribiendo script de shell para Linux incorporado en una pequeña caja industrial. Tengo una variable que contiene el texto pid: 1234 y quiero quitar los primeros X caracteres de la línea, por lo que solo queda 1234. Tengo más variables que necesito para "limpiar", así que necesito cortar los primeros caracteres X y ${string:5} no funciona por alguna razón en mi sistema.¿Cómo puedo quitar los primeros X caracteres de la cadena usando sed?

Lo único que parece tener la caja es sed.

estoy tratando de hacer lo siguiente para trabajar:

result=`echo "$pid" | sed 's/^.\{4\}//g'` 

¿Alguna idea?

+6

Si '$ {cadena: 5}' no funciona, entonces no está utilizando Bash u otro shell que admita esa sintaxis. ¿Qué shell y versión estás usando? ¿Cómo se ve tu shebang? Supongo que estás usando 'sh' (como' dash') o posiblemente 'zsh'. –

Respuesta

17

Esto va a hacer el trabajo demasiado:

echo "$pid"|awk '{print $2}' 
42

Uso del -r opción ("uso extendido de expresiones regulares en el guión") a sed con el fin de utilizar la sintaxis {n}:

$ echo 'pid: 1234'| sed -r 's/^.{5}//' 
1234 
+1

¡Gracias, fue una respuesta rápida! ¡Funciona! – Kokesh

+1

¿cómo sería para el caso, si quisiera quitar los últimos X caracteres de una cadena? – Kokesh

+5

@Kokesh: puede hacer 'sed -r 's /. {5} $ //'' para quitar los últimos 5 caracteres en su lugar –

6

Lo más probable es que tengas cut también. Si es así:

[[email protected]]$ echo "pid: 1234" | cut -d" " -f2 
1234 
+2

He intentado CUT antes, pero las posibilidades son limitadas :) – Kokesh

+1

Problemas con ' cut' es que no maneja las secuencias de espacios en blanco con sensatez, usando 'tr -s ''' para "exprimir" espacios hace que se comporte mejor. – Thor

+1

No está destinado a ser una herramienta para bailar todo el canto; es simple y hace lo que dice en la lata y está ampliamente disponible. Debería funcionar perfectamente para dichos requisitos, y es ciertamente más robusto que recortar caracteres fijos desde posiciones específicas. –

125

lo siguiente debe funcionar:

var="pid: 1234" 
var=${var:5} 

¿Seguro bash es la cáscara de la ejecución de la secuencia de comandos?

+0

Trabajó una delicia. –

+4

¡Esta debería ser la respuesta aceptada! – ndmeiri

4

hágalo pasar por awk '{print substr($0,42)}' donde 42 es uno más que el número de caracteres para soltar. Por ejemplo:

$ echo abcde| awk '{print substr($0,2)}' 
bcde 
$ 
45

Aquí es un método conciso para cortar los primeros X caracteres usando cut(1). Este ejemplo elimina los primeros 4 caracteres.

echo "$pid" | cut -c 4- 
+1

¡Esta es la solución más simple! – Brandon

6

Cortar dos primeros caracteres de la cadena:

string="1234567890"; echo "${string:2}" 
+0

Esto no funciona. – luckytaxi

+0

@ dtp70 ¡Muchas gracias una respuesta genérica, funcionó muy bien! – wolfram77

1

de otra manera, utilizando cut en lugar de sed.

result=`echo $pid | cut -c 5-` 
+0

Quiere eliminar los primeros 4 caracteres. Esto obtiene los primeros 4 caracteres. –

+1

Cambió el código para usar corte en lugar de cabeza. – Evgeny

Cuestiones relacionadas