web-dev-qa-db-fra.com

Comment puis-je créer un script SED et l'utiliser pour éditer un fichier?

Je sais comment éditer un fichier à l'aide d'un pas SED une étape à la fois, mais comment créerai-je un script SED réel puis l'utiliser sur le fichier pour faire les mêmes choses que les commandes SED individuelles feraient? Par exemple, ces 3 commandes 3D:

sed -i '4i \' baconfile

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

sed -i 's /,//' baconfile

18
John

Mettre des commandes dans un fichier

Mettre ces lignes dans un fichier de script nommé script.sed.

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

Puis exécutez-le comme ceci:

$ sed -i -f script.sed baconFile

Faire un script SED autonome

si vous voulez que ce soit un seul exécutable, faites ceci:

#/bin/bash

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

Mettre les lignes ci-dessus dans un fichier appelé script.bash, le rendre exécutable (chmod +x script.bash, et courez-le comme ceci:

$ script.bash baconFile

Création du fichier de script

Vous pouvez utiliser cette méthode pour rendre le fichier que j'ai mentionné ci-dessus.

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

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

Cela rendra le fichier de script. Vous pouvez confirmer en utilisant cette commande:

$ cat script.bash
#!/bin/bash

4i\ 
s/,/\t\t/
s/,/ /
22
slm
sed -i '4i\ 

s/,/\t\t/

s/,/ /' baconFile

sed fonctionne comme la plupart des interprètes, plusieurs commandes peuvent être sur des lignes distinctes ou délimitées par ;. Si vous n'avez pas GNU sed Votre première ligne peut provoquer une erreur.


Pour créer un script SED, vous donnez simplement la voie absolue à votre interprète SED dans votre shebang. et assurez-vous que le fichier est exécutable.

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

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

ou le script pourrait être appelé avec la commande sed. sed -i -f foo file

3
llua

Vous avez besoin de -f option sed -f sed-script

2
loki

Vous pouvez écrire un script Bash ou Korn Shell pour faire cela. Si vous souhaitez le rendre dynamique, vous pouvez le faire pour que cela prend un nom de fichier en tant que paramètre et vous pouvez exécuter ces commandes SED sur n'importe quel fichier souhaité.

Créez un nouveau fichier, dites 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

Vous pouvez ensuite courir updatefile.sh baconFile qui dirigera les trois commandes SED pour le fichier baconFile.

En outre, l'option g dans SED mettra à jour toutes les occurrences de la variable dans le fichier. Par exemple:

sed 's/,/ /g' filename
2
mousumis