Fazer o echo ignorar espaços?

1

Eu tenho um arquivo chamado temp1

   sCellEventTrap-03-27 TRAP-TYPE  -- CAC Code: 01
        ENTERPRISE compaq
        VARIABLES  { scellNameDateTime,
                     scellSWComponent,
                     scellECode,
                     scellCAC,
                     scellEIP}
        DESCRIPTION
             "Severity: Critical -- failure or failure imminent. A physical disk drive has experienced an ID block inconsistency."
           --#TYPE      "StorageCell Event"
           --#SUMMARY   "SCellName-TimeDate %s : SWCID %d : ECode: %d : CAC %d : EIP %d."
           --#ARGUMENTS {0,1,2,3,4,}
           --#SEVERITY  CRITICAL
           --#TIMEINDEX 136
           --#STATE     WARNING
        ::= 13600807

Aplicando isso no temp1

  

prvar = $ (awk '/ VARIÁVEIS /, / DESCRIÇÃO / {gsub ("VARIÁVEIS", ""); gsub ("DESCRIÇÃO", ""); gsub ("}", ""); gsub (" {"," "); gsub (", "," "); print; print":% s "} 'temp1)

Me dá (o que eu quero)

echo $prvar

scellNameDateTime :%s scellSWComponent :%s scellECode :%s scellCAC :%s scellEIP :%s :%s

No entanto isso (o formato não desejado)

echo "$prvar" 

             scellNameDateTime 
:%s
                     scellSWComponent 
:%s
                     scellECode 
:%s
                     scellCAC 
:%s
                     scellEIP 
:%s

:%s

Devo usar prvar em echo junto com texto como este

  

echo "blá blá blá $ prvar"

Fazendo isso, obtenho

blah blah blah              scellNameDateTime 
:%s
                     scellSWComponent 
:%s
                     scellECode 
:%s
                     scellCAC 
:%s
                     scellEIP 
:%s

:%s

O que eu quero imprimir


blah blah blah scellNameDateTime :%s scellSWComponent :%s scellECode :%s scellCAC :%s scellEIP :%s :%s

O "" no prvar ao usar echo cria o problema. O que posso fazer para que o prvar seja impresso em um formato logo acima?

EDITAR
Bem, acontece que não faz diferença o que eu digito no meu SCRIPT echo "$prvar" e echo $prvar imprimir a mesma coisa --- o formato que eu não quero. O Terminal e o script estão se comportando de maneira diferente. Qualquer trabalho em torno disso?

    
por SamFlynn 28.06.2015 / 09:20

2 respostas

1

Você pode usar a expansão de parâmetro e um glob estendido para "normalizar" o espaço em branco.

# enable extended globs so that +([[:space:]]) matches one or more whitespace
shopt -s extglob

# replace all occurances of one or more whitespace with a single space
prvar=${prvar//+([[:space:]])/ }

echo "blah blah blah $prvar blah blah"

Isso permite que você cite com segurança a variável. Se você não citar a variável, a divisão de palavras não será a única coisa que acontecerá. O shell também tentará substituir palavras por nomes de arquivos, se eles contiverem caracteres glob como * , ? , [...] .

    
por geirha 28.06.2015 / 09:44
0

Você não precisa citar (") tudo em eco. Você pode ter muitas opções. Simplesmente não citar prvar:

echo "blah blah blah" $prvar

No shell (que está expandindo $ prvar para você antes que o echo o veja), espaços dentro de aspas (") são preservados, mas espaços e tabulações fora de aspas são reduzidos a um espaço. Por exemplo

echo "a        b"        d            e
a        b d e
    
por meuh 28.06.2015 / 09:26