As ferramentas padrão para a substituição de strings de computador dinamicamente são o próprio shell e AWK . O sh padrão tem algumas construções de manipulação de strings e o bash tem mais algumas; você normalmente os usaria ao fazer algo simples o suficiente em uma pequena quantidade de dados. AWK é uma linguagem Turing completa, com construções imperativas clássicas (atribuição de variáveis, arrays de strings e mapas de strings para strings, if statements, while loops,…) e primitivas de manipulação de string (concatenação, divisão, correspondência de regex e substituição (mas sem grupos de jogos),…). (E também há sed, que é Turing-complete, mas fica muito peludo assim que você vai além de um simples substituto de regex).
A principal razão pela qual o espaço em branco seria perdido é porque você esqueceu de citar uma expansão variável . Você também precisa tomar cuidado ao usar read
: seu trabalho é dividir as linhas em campos, portanto, se você quiser ler uma linha literalmente, precisará IFS= read -r
.
Eu não revi completamente o seu script - parece bastante complexo para o que ele está fazendo - mas você provavelmente quer while IFS= read -r o
em vez de while read o
, se você quiser preservar o espaço em branco. No entanto, para pós-processar a saída de df
, você deve usar algo como
df -P | awk '…'