2010-10-25 47 views
24

Tengo la variable que tiene el valor "abcd.txt".Cómo leer la salida de sed en una variable

Quiero guardar todo antes de la ".txt" en una segunda variable, la sustitución de la ".txt" con ".log"

no tengo ningún problema haciendo eco del valor deseado:

a="abcd.txt" 

echo $a | sed 's/.txt/.log/' 

Pero cómo consigo el valor "abcd.log" en la segunda variable?

Gracias,

Roger

Respuesta

45

Puede utilizar command substitution como:

new_filename=$(echo "$a" | sed 's/.txt/.log/') 

o la forma de acento grave menos recomendable:

new_filename=`echo "$a" | sed 's/.txt/.log/'` 
+1

aún mejor: 'NEW_FILENAME = "$ (echo "$ a" | sed 's/.txt/.log /')"' (en pares de Bash '" "' dentro de la sustitución de comandos todavía coincide). – Benoit

+0

"Menos recomendado"? Tal vez para bash, pero el shell no se ha especificado, por lo que puede ser la única opción :-) –

+0

@Chris: Tienes razón ... – codaddict

9

Puede utilizar acentos abiertos para asignar la salida de un comando a una variable:

logfile=`echo $a | sed 's/.txt/.log/'` 

Eso es asumiendo que estás usando Bash.

Alternativamente, para este problema en particular Bash tiene coincidencia de patrones en sí constructos:

stem=$(textfile%%.txt) 
logfile=$(stem).log 

o

logfile=$(textfile/%.txt/.log) 

El% en el último ejemplo se asegurará de sólo el último .txt se sustituye.

+0

Gracias por los consejos. –

3

si tiene Bash/ksh

$ var="abcd.txt" 
$ echo ${var%.txt}.log 
abcd.log 
$ variable=${var%.txt}.log 
+0

Gracias, pero esto no me lleva a ningún lado ... Ya pude hacer eco ... el problema es que quiero convertirlo en una variable. –

+1

si quieres obtenerlo en variable, solo asignarlo? declarar y asignar variables son cosas MUY básicas en el script de shell, dudo que no sepas cómo hacerlo. – ghostdog74

Cuestiones relacionadas