cómo editar una línea usando sed o awk en Linux que contiene un cierto número o cadena

Mi archivo Stress.k es el siguiente

180.4430
*INCLUDE
$# filename
*STRESS_INITIALIZATION 
*END

Quiero que sea como

180.4430
*INCLUDE
$# filename
*STRESS_INITIALIZATION 
*/home/hassan/534.k 
*END

para eso usé sed de la siguiente manera

a="$(cat flow.k)"
sed  -i -e '/*END/i \*/home/hassan/$a.k ' Stress.k

sin que importe flow.k tiene un solo número como 534.k o algo así. Aquí se sed poner la linea antes END pero no toma el valor de a , sino que pone el mismo alfabeto y no entiende $a.k.

Dígame también cómo eliminar la penúltima línea o la línea con una cadena hassan, por ejemplo, para poder eliminarla primero y luego, para el siguiente paso, la uso para ingresar la línea requerida.

si es posible, sugiera también las alternativas.

saludos cordiales

preguntado el 12 de junio de 12 a las 16:06

2 Respuestas

bash las variables solo se reemplazan cuando están entre comillas dobles, por ejemplo

sed  -i -e "/*END/i \*/home/hassan/$a.k " Stress.k

Respondido el 12 de junio de 12 a las 16:06

El resto del trabajo, como analizar desde otro archivo, lo puedo hacer... entonces, cómo reemplazar 534.k directamente con otro valor de otro archivo en el siguiente paso. esto completaría la respuesta ... como flow.k tiene solo 100, entonces, ¿cómo puedo usar esos 100 y cambiarlos a 100.k en mi archivo Stress.k? Saludos - hamad khan

Use comillas dobles para permitir que la variable se expanda.

sed  -i -e "/*END/i \*/home/hassan/$a.k " Stress.k

Para reemplazar la cadena, hágalo como lee en el archivo:

a=$(sed 's/534/100/' flow.k)

Para eliminar una línea:

sed '/hassan/d' inputfile

Para leer un archivo en la secuencia después de la línea actual:

sed '/foo/r filename' inputfile

Respondido el 12 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.