Generando cadenas de palabras con delimitadores de espacio a partir de una declaración de corte

Generando cadenas de palabras con delimitadores de espacio a partir de una declaración de corte

Soy nuevo en esto. Cuando ejecuto el siguiente comando:

grep "type" /root/myFile | cut-d'=' -f2

Obtengo lo siguiente:

102
304
503
442

Quiero almacenar el contenido del primer comando en una variable de modo que el contenido de la variable sea equivalente a declararlo así:

myVariable="102 304 503 442"

No sé cómo hacer con esto. ¿Lo inicializo myVariablecon una cadena vacía y recorro el contenido del comando línea por línea y lo agrego a myVariable con espacios en blanco en el medio o hay una manera más fácil de hacer esto con bash?

Respuesta1

Puede hacerlo consigo bashmismo, utilizando la sustitución de comandos y luego la expansión de parámetros.

Primero tome la salida del comando en una variable usando la sustitución de comandos $()y luego use la expansión de parámetros para reemplazar todas las nuevas líneas con espacios ${variable//$'\n'/ }:

$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2) 
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442

Pero por motivos de reutilización y limpieza, sería mejor utilizar una matriz:

myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )

e iterar sobre los elementos de la matriz de la manera habitual.

Respuesta2

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`

Lo que está entre comillas invertidas (`) se ejecuta y la salida se asigna a myVariable.

Si su salida actual está separada por avances de línea ( \n), es posible que desee reemplazarlos con espacios como tr:

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`

Nota: Algunas personas prefieren usar la $()sintaxis en lugar de las comillas invertidas, pero ambas son útiles y cuando tengo la opción, uso las comillas invertidas. La verdadera ventaja de tener ambos es si desea manejar la ejecución en dos niveles, ya que la expresión con comillas invertidas se enviará primero a un subshell y luego $()se ejecutará la parte.

información relacionada