Tentando remover espaços antes e depois de uma string junto com a string e sendo substituída por um único espaço dentro de um arquivo

1

Eu estou tentando remover strings do file1.txt como parte de um script bash.

Por exemplo, o arquivo contém:

@some_group1 = take.me bake.shake test.test push.pull
@some_group2 = test.test take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull test.test

A saída que desejo é:

@some_group1 = take.me bake.shake push.pull
@some_group2 = take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull

Eu tentei usar o comando sed, mas não tenho sorte em fazê-lo funcionar.

sed -i 's/\[?]\$username\[?]\/  /g' file1.txt

Qual seria a melhor maneira de realizar essa tarefa?

    
por user885312 19.03.2018 / 23:22

2 respostas

2

sed solução:

username="test.test"
sed "s/ *$username */ /" file

A saída:

@some_group1 = take.me bake.shake push.pull
@some_group2 = take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull 
    
por 19.03.2018 / 23:26
0

Para usar aspas simples e inserir um nome de variável, faça o seguinte:

sed 's/ '"$username"'//' file1.txt

Não é muito bonito, mas pode ser útil em algum momento. Independentemente de usar aspas simples ou aspas duplas diretamente, há um problema subjacente furtivo com o código. Se a variável contiver um '/', o sed irá tratá-lo como parte do comando 's', o que significa que haverá 4 barras e você receberá um erro de sintaxe como:

sed: bla bla bla: unknown option to 's'   #good luck debugging that :)

Para lidar com isso, eu geralmente escolho outro caractere delimitador de sintaxe, um que eu saiba que é menos provável que apareça na minha variável. Por exemplo, o novo comando se tornaria:

sed 's# '"$username"'##' file1.txt
    
por 20.03.2018 / 08:12

Tags