Como exatamente eu crio um script sed e o uso para editar um arquivo? [duplicado]

16
    

Esta pergunta já tem uma resposta aqui:

    

Eu sei como editar um arquivo usando o sed uma etapa por vez, mas como eu criaria um script sed real e o usaria no arquivo para fazer as mesmas coisas que os comandos individuais do sed faria? Por exemplo, esses 3 comandos sed:

sed -i '4i\ ' baconFile

sed -i 's/,/\t\t/' baconFile

sed -i 's/,/ /' baconFile

    
por John 14.10.2013 / 05:50

4 respostas

17

Colocando comandos em um arquivo

Coloque essas linhas em um arquivo de script chamado script.sed .

4i\ 
s/,/\t\t/
s/,/ /

Em seguida, execute-o assim:

$ sed -i -f script.sed baconFile

Criando um script sed autônomo

se você quiser que seja um único executável, faça o seguinte:

#/bin/bash

sed -i '
4i\ 
s/,/\t\t/
s/,/ /
' "$@"

Coloque as linhas acima em um arquivo chamado script.bash , torne-o executável ( chmod +x script.bash e execute-o assim:

$ script.bash baconFile

Criando o arquivo de script

Você pode usar esse método para criar o arquivo que mencionei acima.

$ cat > script.bash <<EOF
#!/bin/bash

4i\ 
s/,/\t\t/
s/,/ /
EOF

Isso fará com que o arquivo de script. Você pode confirmar usando este comando:

$ cat script.bash
#!/bin/bash

4i\ 
s/,/\t\t/
s/,/ /
    
por 14.10.2013 / 06:02
3
sed -i '4i\ 

s/,/\t\t/

s/,/ /' baconFile

sed funciona como a maioria dos intérpretes, vários comandos podem estar em linhas separadas ou delimitados por ; . se você não tiver GNU sed , sua primeira linha pode causar um erro.

Para criar um script sed, basta dar o caminho absoluto para o seu interpretador sed em sua shebang. e verifique se o arquivo é executável.

#!/bin/sed -f
s/foo/bar/

chmod u+x foo
./foo <<<foo
bar

ou o script pode ser chamado junto com o comando sed. sed -i -f foo file

    
por 14.10.2013 / 05:52
1

Você precisa da -f option sed -f sed-script

    
por 14.10.2013 / 06:00
1

Você pode escrever um script de shell bash ou korn para fazer isso. Se você quiser torná-lo dinâmico, você pode fazê-lo para receber um nome de arquivo como parâmetro e você pode executar esses comandos sed em qualquer arquivo que você quiser.

Crie um novo arquivo, diga updatefile.sh

#!/bin/bash
#$1 is the first parameter being passed when calling the script. The variable filename will be used to refer to this.
filename=$1

sed '4i\ ' filename
sed 's/,/\t\t/' filename
sed 's/,/ /' filename

Você pode executar updatefile.sh baconFile , que executará todos os três comandos sed para o arquivo baconFile .

Além disso, a opção g em sed atualizará todas as ocorrências da variável no arquivo. Por exemplo:

sed 's/,/ /g' filename
    
por 14.10.2013 / 06:13