Use sed para editar uma linha em um arquivo com espaços no nome [duplicado]

0

Estou fazendo um loop por pastas, abrindo um arquivo dentro da pasta com o mesmo nome e fazendo alguma manipulação.

Estou usando o sed para manipular uma linha:

sed "1s/Log R Ratio/$SAMPLE.LRR/" $FILE

em que $ FILE é um arquivo com mais de 1 espaços no nome. Exemplo:

NAT062813_Batch A_1_TR27GD1_CytoScanHD_NL_092913/NAT062813_Batch A_1_TR27GD1_CytoScanHD_NL_092913.txt 

Existe uma maneira (sem passar e renomear coisas) para usar sed com esses arquivos? Eu tentei colocar aspas em torno de $ FILE, mas isso apenas imprimiu.

    
por Gaius Augustus 21.12.2015 / 07:45

1 resposta

0

Relendo sua pergunta, acho que você está perdendo a opção -i para sed . Essa é a opção que torna sed editar o arquivo em vez de imprimir os resultados na saída padrão.

Note que é uma boa idéia testar seu comando sed antes usando a opção -i , já que não há comando "desfazer" se você errar.

Portanto, por exemplo, se você executar sed 's/old/new/' myfile , verá o conteúdo de myfile impresso em seu terminal com a primeira instância de old em cada linha substituída por new . Se você executar sed -i 's/old/new/' myfile , não verá nada impresso - myfile será (irrevogavelmente) editado no lugar.

Você também pode usar, por exemplo, -i.bak em vez de -i , o que fará com que o arquivo original seja salvo como myfile.bak e o arquivo editado como myfile . (Você pode definir qualquer extensão que quiser em vez de .bak e não precisa começar com um ponto, mas .bak é convencional para usar com esse propósito.)

As citações em torno de seu nome de arquivo contendo espaço são um problema separado e a resposta é simples - use aspas duplas para obter uma expansão de variáveis sem a divisão de palavras. Então, se você tem uma variável filenamevariable="My file name which contains spaces" , você precisa se referir a ela assim: sed 's/old/new/' "$filenamevariable"

Algumas outras leituras recomendadas:

por 21.12.2015 / 17:40

Tags