2009-06-23 24 views

Respuesta

34

Si la cadena se almacena en una variable llamada $ cadena, entonces esto va a conseguir que le da la subcadena sin los últimos 20 dígitos de fiesta

${str:0:${#str} - 20} 

básicamente, cortar la cadena se puede hacer usando

${[variableName]:[startIndex]:[length]} 

y la longitud de una cadena es

${#[variableName]} 

EDIT: solución usando sed que funciona en archivos:

sed 's/.\{20\}$//' < inputFile 
+4

'$ {str :: - 20}}' es suficiente. –

1

En la sintaxis ${parameter/pattern/string} en bash, patrón es un patrón de ruta de estilo comodín, no una expresión regular. En la sintaxis del comodín, un punto . es solo un punto literal y las llaves se usan para hacer coincidir una selección de opciones (como la tubería | en expresiones regulares), por lo que esa línea simplemente borrará la cadena literal ".20".

+0

Gracias por sus explicaciones, pero parece que solo se puede aceptar una respuesta, lo siento :) – jaimechen

1

Hay varias formas de realizar la tarea básica.

$ str="qa_sharutils-2009-04-22-15-20-39" 

Si desea quitar los últimos 20 caracteres. Esta selección se basa subcadena cero:

$ echo ${str::${#str}-20} 
qa_sharutils 

El "%" y "%%" para despojar de la parte derecha de la cadena. Por ejemplo, si desea que el nombre base, menos todo lo que sigue a la primera "-":

$ echo ${str%%-*} 
qa_sharutils 
+2

'echo" $ {str :: - 20} "' es suficiente. –

0

sólo si sus últimos 20 bytes es siempre la fecha.

$ str="qa_sharutils-2009-04-22-15-20-39" 
$ IFS="-" 
$ set -- $str 
$ echo $1 
qa_sharutils 
$ unset IFS 

o cuando no se necesita el primer trazo y más allá.

$ echo ${str%%-*} 
qa_sharutils 
2

usando awk:

echo $str | awk '{print substr($0,1,length($0)-20)}' 

o el uso de cadenas de manipulación - echo $ {string: Posición: longitud}:

echo ${str:0:$((${#str}-20))} 
+1

'echo" $ {str :: - 20} "' es suficiente. –

1

similar a SUBSTR ('abcdefg', 2-1 , 3) en php:

echo 'abcdefg'|tail -c +2|head -c 3 
Cuestiones relacionadas