Gerando strings de palavras com delimitadores de espaço da instrução cut

1

Eu sou novo no bash. Quando eu executo o seguinte comando:

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

Eu recebo o seguinte:

102
304
503
442

Eu quero armazenar o conteúdo do primeiro comando em uma variável tal que o conteúdo da variável seria o equivalente a declará-lo assim:

myVariable="102 304 503 442"

Eu não sei como fazer isso. Eu inicializo myVariable com uma string vazia e atraviro o conteúdo do comando linha por linha e o adiciono na minhaVariable com espaços em branco entre ou há uma maneira mais fácil de fazer isso com o bash?

    
por LinuxLearner 24.06.2016 / 20:29

2 respostas

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

O que há entre os ticks de retorno (') é executado e a saída é atribuída a myVariable .

Se a saída atual estiver separada por feeds de linha ( \n ), convém substituí-los por espaços com tr , como:

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

Nota: Algumas pessoas preferem usar a sintaxe $() em vez de carrapatos, mas ambas são úteis e quando eu tenho a escolha eu uso as carrapatos. A vantagem real de ter os dois é se você quiser manipular a execução em dois níveis, já que a expressão de retorno será enviada para um sub-shell primeiro e então a porção $() será executada.

    
por 24.06.2016 / 20:34
2

Você pode fazer isso com bash , usando a substituição de comandos e depois a expansão de parâmetros.

Primeiro, pegue a saída do comando em uma variável usando a substituição de comando $() e, em seguida, use a expansão de parâmetro para substituir todas as novas linhas com espaços ${variable//$'\n'/ } :

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

Mas, para reutilização e limpeza, seria melhor usar uma matriz:

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

e iterar sobre os elementos da matriz da maneira usual.

    
por 24.06.2016 / 20:38