Eu sei como editar um arquivo usando o sed, uma etapa de cada vez, mas como eu criaria um script sed real e depois o usaria no arquivo para fazer as mesmas coisas que os comandos sed individuais fariam? Por exemplo, estes 3 comandos sed:
sed -i '4i\ 'baconFile
sed -i 's/,/\t\t/' baconFile
sed -i 's/,/ /' baconFile
Responder1
Colocando comandos em um arquivo
Coloque essas linhas em um arquivo de script chamado script.sed
.
4i\
s/,/\t\t/
s/,/ /
Então execute assim:
$ sed -i -f script.sed baconFile
Criando um script sed independente
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 este método para criar o arquivo que mencionei acima.
$ cat > script.bash <<EOF
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
EOF
Isso criará o arquivo de script. Você pode confirmar usando este comando:
$ cat script.bash
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
Responder2
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, poderá causar um erro.
Para criar um script sed, basta fornecer o caminho absoluto para o seu intérprete sed no seu shebang. e certifique-se de que o arquivo seja 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
Responder3
Você precisa da -f
opçãosed -f sed-script
Responder4
Você pode escrever um script shell bash ou korn para fazer isso. Se quiser torná-lo dinâmico, você pode fazer com que ele receba um nome de arquivo como parâmetro e pode executar esses comandos sed em qualquer arquivo que desejar.
Crie um novo arquivo, digamosupdatefile.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 então executar updatefile.sh baconFile
o qual executará todos os três comandos sed para o arquivo baconFile
.
Além disso, a g
opção sed atualizará todas as ocorrências da variável no arquivo. Por exemplo:
sed 's/,/ /g' filename